Ge`*A{F%G#yxFS$}V}sB2CT;
z$g8XB@zi-_INJ7S{|~Q*)LC4yHQJ^*zmC!%FH4}vMr+Q{XCo`Q94?Bhpf*0NXngMl
zwW&dcqGZ-MW}ia)16J*Ens-1y9Hn(IH6Y97%zGs1sC{)<&xh(`=&C~5`0cEzseokL
zS1^T4#+bU)*B_*7(14ZLr6$GpgeF1^ul`R7+xgz*7g(CJ$P|S2Ly^vkOk%_JB01EA
z&6{9no>G{dS8mJ2inX^!g(|>s-fpVGaG@g!ZpjL|9UMJc=5i9CD$B3z==Hb~02d
za!2fv0b{6p^x3k(!GVb;4kSu2Nbo@S#t+5F9|H)M#PG;S%Z61dBrSb8s^e%HPlN9k
z2)|dpEWAgj0RRQD!8=aFHvUnDQsps^C7~l;n9)=Y+NnAgrg-*me3>mPiRYkYDX}nq
z3ia%vpRr3Q>y921Aa>Ly+Ggr^y7g6L(2wUoty+Rxz5ti0Afr3u=FU(;JMSOTvy^$U
zUFo`waEiQ`uBdM?aHD*VX>(uF@VO>68_Kw?B*zG^^+&07pvd_|t#!gBLTi-cRN@A|
zp@oW(l~MnbTu=9Fa4=X3!N)->O@-345CddEVq%wKSAUl{-jG3S
z3SEgOB<=K-5Sj%kfEC^&bpd|wttL=U%BXk2{>|SRXR7D5fmOs{hs!?&_?<6Ok%PiNr=~iSJ=4{}
zn_BwWFB;o&5zQO4;
zDU4!l?A?ooZMOL514GOt40N)`JUl6uPnUwF+{LBQy?V9~$5EX<&LYZaU}qtpmbaDf
z5R32Z0a2yl#A_j1u~dlmXL!+axDp5by0v3&_2*VtwVn{!EKO
zDLCv+Q<#&=x{HhcgcB2=Dr|#+bNox_v?X~27wE_}`{xh33?(!ni2V=krgt{V`D&!r
z|LEU^bah_W-nZEV8e#vYcG`Z#I#s`&6mVIR>+mblygIC@dHZqSb4ZbhT~@JG$tqKY
zGY#f4_B6Shzv)@~2V?xOBx!Gnt}mRniX#R_gJ1UBa%zFu*sQ*zS1#MN+Op#`Xf1oC
zNGp9V{c@J)rlHEyBc!&m&e5!&Ys;sUY-7mnIz1*OS@03FJ!SC?-#dg+IB;>E>ZhR)
z2X$@!EYx9XbGsBXw(_gdbRW=^@K=4caT4-LZicHbEA#Jba(GNg-1^y9(1vvI4XD7h
z**+QeZB8<-+706@4vs20B$v&wOhSf#z$7#$Ctb^Ou^=zV`7#}0xc-7nlyg_^Ml$mw
z@ZJaPPX5!KYId*@nk&M;9(@56Sf6*e&>n6U^8TFac~BxyNq~bmOahQr&8I?Vn;VfC
zIKup{Rq{%phA|$|H6(Gp=1U#(rLNTC=JdI?6(eYGd2>gqgcNXCWhx)rC)+B-T-qN8
zoWugeiR`xHON)xbTnt(ds6xi}~sE?6f9mrb}G
zDw;(SL{xYiO{PyX+XWRm5gsag82cgcDUjA;-uH2gS|*a@654Plf4>r7{Wr;$*MOhxvVqIY67{Mjr(fhM@}=je7a%KP
zgH4B(TwRR`2;(UUN8?Kuv0#jmWtX8lNDTgU0u?Mr40z(O5}=ClCf4Knu#@e2oDHbU
z)^g@*c9yB0_WR4&`LNqC!b|-@mGg-wWJ~y^o1tZPGQGZ&)=bDJe?8zbRI`1rUVvio
zEN|22S+k)R^4e+;n;3www}iF{21}?$Fr1004;O=zX{~ivT^0G&xakJ*S|ys
z8GEH^x|Q=$<9k2W@RLUHzylZWoG8h)3-Caz>4=^_2<{J3!BHVlv$ZCJ%yww~>PzQp
z_9}GKjk`MTHN`^(RDjVZLsWs-RO2I@6EqA@*zU0yuC`?-F*c
z<0<^=DlBIQ?Sa1$t`7NxuL=09E`dTHyPy6ve#~R`QZC^NehpFu}=*4H_^E
zN)q4~rGW*(-o5EmbG>Yq9VNRhLKVCa$uR`o;_T4@MS#m4bi&z|?FjGSfsODB;bu^eGwQe}~xkL1H;76f)U9nP>hDZPGvifTsgGXQk)@>r25>eYK+riYWny
zQD3w}4(aSOf^#87XaPJE5s7u!>Jo+nPHpCRIMMsXva$zD(FUh$p7`v|bqr72lv6yF
zcz83uCt=#Xi6&7J!Kz~eABE_JZbYORM)l;a&%A2RcaN&yb*6s92}^S8_(Z3N1;N5J
z%Sk?rpvT=`!Za@2=1NcfS23UrTi@y7Dj{EeOy%)fO(;Cmp@9agZ%PL|yHGrPbjfN~
z|0cYNx%`*B?Z0srl(l+adn}0ZjG_Pq%D^BB;sEjc^&t0Nyj;Egv|_gUls&Fe{CI(F
zem;GYmM8V?EnmzOW6b*nmly`|#2`*iw!GKKD;WOG#b{
znFnDSp@5l)>-T%Y*uI={Ic&fZSpQ`Ns{Qak^(=#mh&Pnho4L9a0w+?A*r5pHR0oB`
z^q_($QdKL&53E+gX8+a}E5q1#a+lRy;->FK@;xDVat79=?@yTZ{>hnxj|?y479*1vmPudRW~Jj3E;o78BpZU*yZmSX0>Tk2)W|L3Ii2zl{Y9vl^AQYKYiRP
zOaP?|j^)cdPQM1c1G~r{h}7j1jR72g(%9fB=5Wm!-B%F;o-O2Cz)Un}$?-y$_4lP8
z7Q{sfb5hHG6hwTK$zBu`dU&ITvv|q*>4!lAq*hZMox8PdM-esU_iFgPO${%F3
zGBu7Ihs=lanziSC5;))_SNlF35&WpGlHSm6j}o0dw{DJic)lr#<=iJ=0m?H
zB)&qml@cEa(v;fyP+vV
zz?lp+TB!j0}be0>z*=*Qze{5mIxzZ2h_mwX$CS3j0h>V@TYI-snsd!n@%-%gJnKx17)}V}
zR+{y%Xbv$50vUVQHR4henlxeW!lrp}@xTQ5qZGkat{iOrn|O>ohv)?yI|&~b{T+L<
z*3Eh*`jZ~iCE4aLG^n5$)V*8~hb%aKQU5jvz*n$;-ToondEneo$(%`W%BI;ihUbK7
z^;ckIH}r%D#7_!`du$XLnz_X=q;Cbk8$rlFiCdU+_5mwR8UZQ3<0uCnC?FhM1h0(U
z5bIy!(|D(@bH9Pv7A|5GC`QhLqDQ($8NfpZVS1RguiX~WWBzhSy!+I3b2VU5(7;UI
zgtbEy8UTSHGJdv4=qSgVw_gIno8
zhFRB4O_9x7Y$B{V{-#8j#H8{cZm^0Z5}-J`EioNLETtLh-ok;kvH*&u
z1A9Dwpf5tyQ4uWRPRkb85YRiHPWH7Q{Od2JD15XCGTlgUnGc0=fK*@@DxWy&7ASLW
zVjap#o5R9RBl59`bFHuTb6vm%PzN}e0-16Za{~Dt=HX4!6;IqerXzb^%(!XlbqZ<)
zgeDsas4RFEZ;eilH4=XBc+|GN_2k-d;u&U-t=B5YKOq&5dIzD2foZ>#5Y*OlomQa?
zFvwfqc^n}0S^c+t-SJp2^9i+t?|sy;uTN;{af{xdS);un`~w&$3VyzY=mDR`V!BD&
z`-rdWJWmGsJ~Ni_ijz~9r*bJPGELHg8%1E*;g7X+y#|szAeXE##`f#bgLd@;i=a5I
zEgi+_Ngag1j9mCKuUC#vgl$V`q*VQU$1UF=1N)2#>Y+8dLYp%W-=!(zl^`b&bnsj4
ziafk~fkwK91Hg)9)YTC5EOpR!{hFkMOh(ZRG0t=%Pcy(I)^Z)X%iF0;&|$hi&Fy@N
zvnwdD%u)8eOIzwQ4}1IG2`*$*Z_Z+~|1tX&+WUPa%~dYkI2^8nU3#3b0)ETmXdU*WtMTxdPPqwlTIi4x^9qm`&hgEp3I;HgT5U9fb%mwX~Z?4zT?(0=T@d0
zj=DdYdeZpfNnRCpPOP?7`GOgdLdNlEU*^=M!frk)ilC273VGTWts96c3bTpN0O!}x
zHWw7tbAnX(7Kqp`_$;x|XlHxN-0-nurhkaCV{eKT@Re}z*}i)FO$3n?#wc=&eNo(z
zk7i-W#8s`4U?CQIZFk>~j9i%u2D2x_w9NqgeO?+PZAjI%tr!zw7$=#FEmLyYzSYp8
zgJV63bknAG9&>)c4Ejv;W$SNuB}TUGz)166EI`1m82PPDoStBT-eIQS!>onjfLGm@
z*+yX)hiKhrMtZLM^_xF1Yl+X*@h-}GjH{^LT
z{i+?B8p5e5!wCZg{ob9Go@)dWogP@*iM3SE>igLV=U2N-FT~?y+1Y2Z{X^iCmB{4#
zQqbv07|cb&kSJX$eUJhoD5y@N^=+d6)LxIa=2XXZuc(w6bwD*TLr3gQ!d%Gl{pDrGb9683dLW?>w-6-5UStF@AS}#a}Q+MSsy|^
zp+<-}<@T{
zH=EXF$R3Uzr+iPOwnnG<`wqXv(l#3zD*E#17Ub}V@gkZgn(6Dga`>1PFervmY
z=)BweW92nRP0n{*Iv`nhwVzgv+9csCl=Hl}Y!G=}^zswk_tNR`U_&l7;+oB$Iv8?P
z({C+Q>elxg`m<2E2|%YfVWG!X(sV#<)0vWy`z?C{N)O>2%4OP5KWpZnHPKDCf6HRA
zC;3!7+Ca^ojmx``(_UMRD|7pzn>2k#Sx<(5&O8h8SlC>%8YswgSr(>)JDl3f1VUMEaqqg6Od|1U4Wa&Vjmi;eF~8NA@0>|@k`VNjsy(w`c2P!NKStv5tH
z{yIywe4;;Bo4DMEsCY#rNK?`{n7k@l=>BO?lBb~eHHlxk7^(KwVyP{@GBXKR1U$M^
zxh#yJjSL#u6A^c;#TcNs+A2Zr-+1V~eauyoIrpR6^Q@fw+s81vaF>hk+alY7HwqFa
ziQbNL<@K9jdfTN4_%6Z63IsC6r>4z=@K3b@;e&_U2(|RGW99GwIWru#xuX@>0wU
zdrrSipcq9+*MSD`0mVhYFcH4{>h!xTnXYi9suXmXv@t1Y6eyNlC*(EuM^mBBD>|Y-
z-2dTwSeWYI1+7mkXDJrMvfAt+B~FiN)q6foN$gx==jg43GNYUEhbav)g~oNoFtPi#
z{=sS;4#SbKSO5^4Li&fkOf5bA^dFjl@`08Dsf*VMV$GYvIs{RPn|WlcS3*pz2zPBo
z(uiLfIE<=PA;I-~fSb2yl+xQ=e3anV>xRnP-AEakP3gglU)JZ0*K;%-ipSGt1
z<32Zz>iHCU{_-VZaVA+6W@iN}eHKd4xb6G#`T;x(4kPZIJbXy;(5C`K3A&sJ>H6hI
z$Y)cRqug(BzK`0nU~TJ&8q`TR;2m~fZW)Vir^4UcnXbJ;#M?P=F<)Id8k+^x4KeQ)
zGq;_CK);(G!+V6>Z_qm!svkWR{?m-r8g!<=bhXm$7L66|huo2uwVLn!m?frUqTcLt
z1119NZZPXSbKtSB9G5cd*qQDVOFFzRdcSd1(Q@fVx9$F$f6?LQBz08jX2tH*rLRNi
zVr?0(>pQhltB0Yk|LZ9vb7aSr6q-ex@-%+AHx|LM_{1s1e`K;qfeu>86tu
zxGq0O`k6I7?|^OO;Ri@AD$=1;NMZU
zd;-Uhri%=c;>O#7QzN%Sqp!2x3;Ax-$yu8Xy6AHwY-GWy;hZ7&8}C|IFT1oq63JZ+
zmtd*KKSvFzzE8|WA$!6k`{oNfly)=OhR)s5>t|LdL1TyIvmyL-2l0EK%xzHYWNxSV
zb-xb;%O@*Md{ePmnvX^}d{EShkBaTK__$Vix=+ZSWSTUrczN_={&N{|g25jfr1QCS
z+30;bQ|!g?4UaY|??dbTir_)MdPJF+fpBj3Oqb6eS<`kSvsaf9fwZOV>>)CizvAVh
z_D&>Yrk<<2>SUXjF})qwzS?AYPJcnS=K2>2K9Ql?3^c&6q`Fl-yLhcHkHjHiDb6nQ
z#h0HPDfLUwVYKG`zTzbDsN)tk9`_SDr(qG?g4m?DmLv&L==|B!H5C5nb@f2Ci7}Ez
znFbR=#N2I|sH@hVH%M-pa<5X#j^7aLGmOY+VpZ2LXgXtzNI=JBe{g%A5wf+7mt#
z+Hej*4I_pEu9i=`bZHB>dJZaszTxzG+6TFP-;LE?OyAZx&(#z}Kd2iCJk6x6#Ix*F
zdLfD0&obq!Vy7PSS|FW?7Mk<0Yr_fN9a*xwQnhj26_qctR!`c-oQJOA1KO@iUPe}1
z7r-k^2WVVWeI-FgUs@Sk^dzoSE&OT777|?%3Cnpa>@5)}4j_}8*XAbPB!C=Q3^Ovs
zVInHAKy6PDE9~_>J~C*iJbB!ArbbA|;-jP~(bL@OrJxxm5Ep0Ma3(+GsCPRGH`W4`
zubaZiD6s=OVBR4>(7)}+PBIfB_<44RH$`o@lUQr8HSp?vq^motfKJU#(j?ytyFGtr
zKw%)|T7tk`(fFNuD$MA5uJiBPqI%6{LN~D!mDlzBKupQ2$2g8?T!?_S-`Q!(VjSMk
zeLT3pVgcXRf-!GUUL87HSN(Xs=PxGq!v*B}3N*QL_6a2{h;=ntnXb-R`&RDY-f6yciHh^8b)EQ`X1
z2=J}r-d2%N&bnq)*z?BuDJZM}xz~{sT(I9h8G)FEIEAxd!uYohHWc_FqCDDX5=+Tc
zj!@3NMuI#yY&~krz0axSKy$UMVZv
zQllc4Qno_go#hHFZmF1#pGGVs$+hoWDI)lwEQ$-Y%=-DQyhOOyN5h0z`
zxUkR5fIM)2jSy8!pCSb`kE?k*Fo@e`1`7%t=+?9EO1mm@n^s+Td+tLtjB_*Z9u<-8
z)=?$g2@HrEd&E;&6$4_s8M}6{6+s2*z94p2ZIYIlX+VB{q_wY7tvD=5B+u<>z4<8a
z-TRP;F=y;uKkAXqpC*(DKp~4JnN_xx8YQWH^-fjGYlc{T_qzv0K&VI_c`Z9rUd?Qs
zJR-K1_`3sTcH6rYHdUmD(w_)|jZ?F+0_0>C{ZFLoHG&JQYh@4Cvh1;`(n7%y{j2+k|O&Rx#gP6=?KN$DW6Bj(xBTAk8?ssUzH~cBGe-<`WULv
zJeBBr@Xi(8+V$S^x?2SKQ?MAd^yuMJlV-L
z!U)3sWqpPehX2l+X%U#GeGW{DrhvM~_nqqrp5|cbo4tj|H}V_XjhpZSS%D5G`lQ4x
zQw0vYHN)NFSgPD<^u#QgD;%g~@q^rL`u1@FadQL=QCt
zqpeSWnN{ucgWM;hxk9xD5!`kOmFKMJbQm{%XA2~*`p>^YxJSYE;a
zqCR;bYiQB+;bGjRqTpF;N23lfFL+?fqhV>XJW)4(@4=<4b&dc=Lw5U0FPS0hW0}ze
zBG((ybEJ;}GQKJPTsS9=+kiI_CT-#=AFVL;(3mcpkK@~FXWcCa$)ylCy}i&z#@b;z-e-4ST^>#y67y!K~8)}PSlKKh4cF`|$fMbgx{TOpp^5FHj|
zCyQ;kTWB=lX*c1r_3m{4l>n|&@k`g^RS%$-Z!j5-WGe$!QZcUK1h$HfOM22_g-80i
z*Yuy5ehU`)%bG-)wQ}|Jv4^=yw!vaPPi`*J~R8qV>_bR$Yyr;>PCBUv^LrT8y;M
zlSP_wA5nrOm6v}mZ-IK`hT*3N0~y~6|H$@-Pp}8hWYnm^QY^g9IpJ(gHhADG9F4Cr
z_M_E@GdUZm2pB~pAA%JZ`ck#a9FY-*+0)n{>O?d_?6>`Fj+LvUT_6f&cD22K)WhD-
znCBs+pTn`T<9#qn*jxHRH@=TjLPjgkm}gNId?o#YShs*O7!~|cDy}@2{<(cHHVyl&
z(hw>xgdvtj>_g=<7U~cRkJ=U0R&Rtuf*YMD3{ajS+c4PrL}-$BBitfaj8rDzH3Hs*
zU4U%FNfuZU_`@6J2l3Cy&p2!leDtmo+m}X{4w#3G6HJ5r9}Yc(6}v0CSLDiW`J@*n5^;*Rg{37iC9+VC?dU#=;?;y
z((y^+JlB>+99ElGo_d?6U@_tQKae^NVkeC+^t62jKFiX}!@6jCcAbtWreEC!Dn3KT
zo1{5cvwV5pwpmWf+1hFFBJqi!x7ho|%iRIb94R9lh?ZHZ*BI4#h@ufv(~nM}G$yfJ
z*XYkH;sky}U;M{ahIljBy{T|D>nDoHu0AhF6UD`zfzC0jw$cUhPP&L%w^Q)>SpI?r
z6*8z9%EVxK6qpAllmb8hBM+ch@UCsM;_OJ{&|yJ1;I7s2b_OKRQ&0hC=UVVhRjsF!
z>pQ%Ampl~cbQ~O4+;qP_Pn2T@dTWvxqpK=TGFV*=7NeUBk$qZzXOjF;6E*0+Gv@_<
z@j5D1=ARyxK^A*$U>BxrfJkdWnXv*UcYM&R%O@F2=b_EjM%b;-I60nd&S`nceAgg3
zgd?cDbe`ycsM4L`2&xD*NGvLsj?N9G;(2F6upROaXzNGA5hLLJzY#P;s+WXXI6oi
zT%bAv>Tw3@QI6bcdVhc}faQP4&bzn$W&PB)TGEQBp!9*}Y&f=k`9e_`yi*3Zc!7MM
z9BEkSrDg6+h`>J)6?r|0OWpU&t#2W}M*HdgnFQ%WVV_YvxHha}D_Z69uDDE|KO-<+
zXc*j4KlktZPn$(!K~8pc4sKZ~EmLMhV70mENAiE{q5}{>HO1P2!?NM96*+VPCT5b7
zeuH4x0Svpxg(UqhAVWf3#&+z{Y40SGz7fub}ddB&A`>(daJBIGy{kwmjxvpw}={NE;&
zSmWV=bJzTcLBDIEg>e#Ny>~}B763sF0$~4siKfoz!D{2e{zp7y$i~4ZN=Z==h%F6S
z-kW*E-VcHB$%zN6Sb%v^;$mNc1c-j&u>2m;_nb1Y+Moa150z@1`$WmFjbu;fdL@^7gL(VzsL@aJlgsy=ZJtPpa<54mis{J
z>92nO{y%Yk35oRvZD2W*0>h>IOC-n`rfy3Ao|<%n-nk(PIN&hbEDDXULRhha@#}va
zwYdi0q*`y$y*2#%r&}A$9^0A6vaB7Gekkwifo>c3C<+T1|7zIo&*&h?q)$#Jig&^S
z!iT}A!Fo*HE*;bGdW9u1kO_!&J0cR^tqv&?3Xm8(k@}+tGC`-zq?=?Z^95SXq567`TafgAKqZ
zaKD9MY6s=dtoKCJA~`fbioq{rJOzXx6L3nNAQk?H2#PHjlmn0#JzaE46b9e?le}+}
z7pIcK4F-xsp!+m|MuV)7*snPe+>sUq;E1mPM0G|O?@ObqJ5r!g@=@AkzJ*D$k7H)1
zdH6L)&@~b;0c+fo$fe=Q^lhGz13KnWJ>65fuXAx`$}Q?ansK38uLBvj*Wn;@VxjmNCkKJD$g(K3zm9mVVc!dxyow!
zDH#ofmvj*LZt^!AUhqfd<|D-dojc&A1{ExDiPZq@7diB8&H_C)X_a(xbqN&ipd#Fs
z!iyDa#GRxU5k1dZct%{DlH2iZ>i+~91Lgdu!XgMD97Ry9whRQMTK>6f?-P
zrga|6qvWB;xdjqHI0}U6T2TmyYaS`ko^T$Cxzv~zGusQ~N>Ql@Ea=Q}xxw7cdR3`-
zd3g{5;-%XrGnzcfWV|>!Gl50PZ#*Vv-(gJq`#gg@Ge>VuL_oZ8RenR`Jc&4ckCe7u
z{>|qvl@cIe7KFjWA|B*78g?-tAPsYP++3oPm;|pG2@q{$1Xrii5Rf`~GecW?N%xgp
z$yOSA*BQxLSLW;Y(h)&$~?Mjp(iSVbzXLpkbch^}yScZW3
z;3W@i4Ck0kpDHT^OA>x1Iyp^DXRb-L{#%gw8P6u8j3u-59HXbIbxK`oM?mW0NypkT
zLQsfM?D;B)Fc1uTfGK%30R&_<58hcKkQ5ZD;uN{?E|MGFHhCpV$<92AF3i)yQWD?h
zdCg-GVPpr&nUfJfKqlkG(FGD1BPv8HJ=TfH0L!8;X+r)2MWghF|+`9uH#
z@yT1*I+Q>hx#$5=^b&}Sz7K__wN3XmlF?V)n+a07*qoM6N<$f~|wfC;$Ke
literal 0
HcmV?d00001
diff --git a/src/App.tsx b/src/App.tsx
index a1c0e69..d1093e5 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -52,9 +52,9 @@ const AlertsPage = lazy(() => import('@/pages/AlertsPage'));
const ProfilePage = lazy(() => import('@/pages/Profile'));
const SettingsPage = lazy(() => import('@/pages/settings/Settings'));
const TradePage = lazy(() => import('@/pages/trade/Trade'));
-const RewardsPage = lazy(() => import('@/pages/rewards/RewardsPage'));
const TermsOfUsePage = lazy(() => import('@/pages/TermsOfUsePage'));
const PrivacyPolicyPage = lazy(() => import('@/pages/PrivacyPolicyPage'));
+const TokenPage = lazy(() => import('@/pages/token/Token'));
const queryClient = new QueryClient();
@@ -87,7 +87,7 @@ const Content = () => {
} />
} />
- } />
+ } />
{isTablet && (
<>
} />
@@ -207,6 +207,7 @@ Styled.Content = styled.div<{ isShowingHeader: boolean; isShowingFooter: boolean
Styled.Main = styled.main`
${layoutMixins.contentSectionAttached}
+ box-shadow: none;
grid-area: Main;
diff --git a/src/components/ContentSectionHeader.tsx b/src/components/ContentSectionHeader.tsx
index 4582cf5..5f1e2db 100644
--- a/src/components/ContentSectionHeader.tsx
+++ b/src/components/ContentSectionHeader.tsx
@@ -6,6 +6,7 @@ import { layoutMixins } from '@/styles/layoutMixins';
type ElementProps = {
title: string;
subtitle?: React.ReactNode;
+ slotLeft?: React.ReactNode;
slotRight?: React.ReactNode;
};
@@ -16,14 +17,16 @@ type StyleProps = {
export const ContentSectionHeader = ({
title,
subtitle,
+ slotLeft,
slotRight,
className,
}: ElementProps & StyleProps) => (
-
+ {slotLeft}
+
{title && {title}
}
{subtitle && {subtitle}
}
-
+
{slotRight}
);
@@ -40,9 +43,15 @@ Styled.ContentSectionHeader = styled.header`
padding: 1rem var(--header-horizontal-padding);
- > div {
- ${layoutMixins.column}
+ @media ${breakpoints.tablet} {
+ flex-wrap: wrap;
+ --header-horizontal-padding: 1.25rem;
}
+`;
+
+Styled.Header = styled.div`
+ ${layoutMixins.column}
+ flex: 1;
h3 {
color: var(--color-text-2);
@@ -54,9 +63,4 @@ Styled.ContentSectionHeader = styled.header`
font: var(--font-small-book);
margin-top: 0.25rem;
}
-
- @media ${breakpoints.tablet} {
- flex-wrap: wrap;
- --header-horizontal-padding: 1.25rem;
- }
`;
diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx
index 216da7d..81427ad 100644
--- a/src/components/Icon.tsx
+++ b/src/components/Icon.tsx
@@ -25,6 +25,7 @@ import {
CoinsIcon,
CommentIcon,
CopyIcon,
+ CurrencySignIcon,
DepositIcon,
DepthChartIcon,
DiscordIcon,
@@ -35,6 +36,7 @@ import {
FundingChartIcon,
GearIcon,
GiftboxIcon,
+ GovernanceIcon,
HelpCircleIcon,
HideIcon,
HistoryIcon,
@@ -70,6 +72,7 @@ import {
StarIcon,
SunIcon,
TerminalIcon,
+ TokenIcon,
TradeIcon,
TransferIcon,
TriangleIcon,
@@ -103,6 +106,7 @@ export enum IconName {
Coins = 'Coins',
Comment = 'Comment',
Copy = 'Copy',
+ CurrencySign = 'CurrencySign',
Deposit = 'Deposit',
DepthChart = 'DepthChart',
Discord = 'Discord',
@@ -113,6 +117,7 @@ export enum IconName {
FundingChart = 'FundingChart',
Gear = 'Gear',
Giftbox = 'Giftbox',
+ Governance = 'Governance',
HelpCircle = 'HelpCircle',
Hide = 'Hide',
History = 'History',
@@ -149,6 +154,7 @@ export enum IconName {
Sun = 'Sun',
Terminal = 'Terminal',
TogglesMenu = 'TogglesMenu',
+ Token = 'Token',
Trade = 'Trade',
Transfer = 'Transfer',
Triangle = 'Triangle',
@@ -182,6 +188,7 @@ const icons = {
[IconName.Coins]: CoinsIcon,
[IconName.Comment]: CommentIcon,
[IconName.Copy]: CopyIcon,
+ [IconName.CurrencySign]: CurrencySignIcon,
[IconName.Deposit]: DepositIcon,
[IconName.DepthChart]: DepthChartIcon,
[IconName.Discord]: DiscordIcon,
@@ -192,6 +199,7 @@ const icons = {
[IconName.FundingChart]: FundingChartIcon,
[IconName.Gear]: GearIcon,
[IconName.Giftbox]: GiftboxIcon,
+ [IconName.Governance]: GovernanceIcon,
[IconName.HelpCircle]: HelpCircleIcon,
[IconName.Hide]: HideIcon,
[IconName.History]: HistoryIcon,
@@ -227,6 +235,7 @@ const icons = {
[IconName.Sun]: SunIcon,
[IconName.Terminal]: TerminalIcon,
[IconName.TogglesMenu]: TogglesMenuIcon,
+ [IconName.Token]: TokenIcon,
[IconName.Trade]: TradeIcon,
[IconName.Transfer]: TransferIcon,
[IconName.Triangle]: TriangleIcon,
diff --git a/src/components/WithSidebar.tsx b/src/components/WithSidebar.tsx
index 4e4c79a..676c634 100644
--- a/src/components/WithSidebar.tsx
+++ b/src/components/WithSidebar.tsx
@@ -106,8 +106,6 @@ Styled.Container = styled.div`
--stickyArea1-leftGap: var(--border-width);
min-height: var(--stickyArea-height);
- ${layoutMixins.withOuterAndInnerBorders}
-
display: grid;
grid-template: var(--withSidebar-gridTemplate);
`;
@@ -120,6 +118,7 @@ Styled.Side = styled.aside`
${layoutMixins.sticky}
max-height: var(--stickyArea-height);
backdrop-filter: none;
+ background-color: var(--color-layer-2);
${layoutMixins.stack}
`;
diff --git a/src/constants/dialogs.ts b/src/constants/dialogs.ts
index bad393c..6ed34ec 100644
--- a/src/constants/dialogs.ts
+++ b/src/constants/dialogs.ts
@@ -5,6 +5,7 @@ export enum DialogTypes {
DisplaySettings = 'DisplaySettings',
ExchangeOffline = 'ExchangeOffline',
ExternalLink = 'ExternalLink',
+ ExternalNavStride = 'ExternalNavStride',
FillDetails = 'FillDetails',
Help = 'Help',
ExternalNavKeplr = 'ExternalNavKeplr',
diff --git a/src/constants/routes.ts b/src/constants/routes.ts
index 5c86896..491cabd 100644
--- a/src/constants/routes.ts
+++ b/src/constants/routes.ts
@@ -29,6 +29,12 @@ export enum HistoryRoute {
Payments = 'payments',
}
+export enum TokenRoute {
+ TradingRewards = 'trading-rewards',
+ StakingRewards = 'staking-rewards',
+ Governance = 'governance',
+}
+
export enum MobileSettingsRoute {
Language = 'language',
Notifications = 'notifications',
diff --git a/src/hooks/useMarketsData.ts b/src/hooks/useMarketsData.ts
index 020db64..b5c6011 100644
--- a/src/hooks/useMarketsData.ts
+++ b/src/hooks/useMarketsData.ts
@@ -33,7 +33,7 @@ export const useMarketsData = (
return Object.values(allPerpetualMarkets)
.filter(isTruthy)
.map((marketData) => ({
- asset: allAssets[marketData.assetId],
+ asset: allAssets[marketData.assetId] ?? {},
tickSizeDecimals: marketData.configs?.tickSizeDecimals,
...marketData,
...marketData.perpetual,
@@ -46,9 +46,10 @@ export const useMarketsData = (
if (searchFilter) {
return filtered.filter(
- ({ asset }) =>
+ ({ asset, id }) =>
asset?.name?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) ||
- asset?.id?.toLocaleLowerCase().includes(searchFilter.toLowerCase())
+ asset?.id?.toLocaleLowerCase().includes(searchFilter.toLowerCase()) ||
+ id?.toLocaleLowerCase().includes(searchFilter.toLowerCase())
);
}
return filtered;
diff --git a/src/hooks/useURLConfigs.ts b/src/hooks/useURLConfigs.ts
index 570fdff..67cfc1d 100644
--- a/src/hooks/useURLConfigs.ts
+++ b/src/hooks/useURLConfigs.ts
@@ -21,6 +21,7 @@ export interface LinksConfigs {
newMarketProposalLearnMore: string;
stakingLearnMore?: string;
keplrDashboard?: string;
+ strideZoneApp?: string;
accountExportLearnMore?: string;
walletLearnMore?: string;
}
@@ -46,6 +47,7 @@ export const useURLConfigs = (): LinksConfigs => {
newMarketProposalLearnMore: linksConfigs.newMarketProposalLearnMore || FALLBACK_URL,
stakingLearnMore: linksConfigs.stakingLearnMore || FALLBACK_URL,
keplrDashboard: linksConfigs.keplrDashboard || FALLBACK_URL,
+ strideZoneApp: linksConfigs.strideZoneApp || FALLBACK_URL,
accountExportLearnMore: linksConfigs.accountExportLearnMore || FALLBACK_URL,
walletLearnMore: linksConfigs.walletLearnMore || FALLBACK_URL,
};
diff --git a/src/icons/chaos-labs.tsx b/src/icons/chaos-labs.tsx
index 8779b79..cf42b6d 100644
--- a/src/icons/chaos-labs.tsx
+++ b/src/icons/chaos-labs.tsx
@@ -36,8 +36,8 @@ const ChaosLabsIcon: React.FC = () => {
fill={fills[1]}
/>
@@ -50,8 +50,8 @@ const ChaosLabsIcon: React.FC = () => {
fill={fills[1]}
/>
diff --git a/src/icons/currency-sign.svg b/src/icons/currency-sign.svg
new file mode 100644
index 0000000..f8b4440
--- /dev/null
+++ b/src/icons/currency-sign.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/icons/governance.svg b/src/icons/governance.svg
new file mode 100644
index 0000000..4c17dfe
--- /dev/null
+++ b/src/icons/governance.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/icons/index.ts b/src/icons/index.ts
index 15b17c1..836b130 100644
--- a/src/icons/index.ts
+++ b/src/icons/index.ts
@@ -1,4 +1,3 @@
-import ChaosLabsIcon from './chaos-labs';
export { default as AddressConnectorIcon } from './address-connector.svg';
export { default as ArrowIcon } from './arrow.svg';
export { default as Bar3Icon } from './bar3.svg';
@@ -20,6 +19,7 @@ export { default as CoinMarketCapIcon } from './logos/coinmarketcap.svg';
export { default as CoinsIcon } from './coins.svg';
export { default as CommentIcon } from './comment.svg';
export { default as CopyIcon } from './copy.svg';
+export { default as CurrencySignIcon } from './currency-sign.svg';
export { default as DepositIcon } from './deposit.svg';
export { default as DepthChartIcon } from './depth-chart.svg';
export { default as DiscordIcon } from './discord.svg';
@@ -29,6 +29,7 @@ export { default as FileIcon } from './file.svg';
export { default as FundingChartIcon } from './funding-chart.svg';
export { default as GearIcon } from './gear.svg';
export { default as GiftboxIcon } from './giftbox.svg';
+export { default as GovernanceIcon } from './governance.svg';
export { default as HelpCircleIcon } from './help-circle.svg';
export { default as HideIcon } from './hide.svg';
export { default as HistoryIcon } from './history.svg';
@@ -60,6 +61,7 @@ export { default as StarIcon } from './star.svg';
export { default as SunIcon } from './sun.svg';
export { default as TerminalIcon } from './terminal.svg';
export { default as TogglesMenuIcon } from './toggles-menu.svg';
+export { default as TokenIcon } from './token.svg';
export { default as TradeIcon } from './trade.svg';
export { default as TransferIcon } from './transfer.svg';
export { default as TriangleIcon } from './triangle.svg';
diff --git a/src/icons/token.svg b/src/icons/token.svg
new file mode 100644
index 0000000..10197b1
--- /dev/null
+++ b/src/icons/token.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/layout/DialogManager.tsx b/src/layout/DialogManager.tsx
index 04406cc..4c5ec7e 100644
--- a/src/layout/DialogManager.tsx
+++ b/src/layout/DialogManager.tsx
@@ -30,6 +30,7 @@ import { OrderDetailsDialog } from '@/views/dialogs/DetailsDialog/OrderDetailsDi
import { FillDetailsDialog } from '@/views/dialogs/DetailsDialog/FillDetailsDialog';
import { NewMarketMessageDetailsDialog } from '@/views/dialogs/NewMarketMessageDetailsDialog';
import { NewMarketAgreementDialog } from '@/views/dialogs/NewMarketAgreementDialog';
+import { ExternalNavStrideDialog } from '@/views/dialogs/ExternalNavStrideDialog';
export const DialogManager = () => {
const dispatch = useDispatch();
@@ -59,6 +60,7 @@ export const DialogManager = () => {
[DialogTypes.Help]: ,
[DialogTypes.ExternalNavKeplr]: ,
[DialogTypes.ExternalLink]: ,
+ [DialogTypes.ExternalNavStride]: ,
[DialogTypes.MnemonicExport]: ,
[DialogTypes.MobileSignIn]: ,
[DialogTypes.Onboarding]: ,
diff --git a/src/pages/Profile.tsx b/src/pages/Profile.tsx
index 1324824..0d5253c 100644
--- a/src/pages/Profile.tsx
+++ b/src/pages/Profile.tsx
@@ -4,9 +4,15 @@ import { useDispatch, useSelector } from 'react-redux';
import { useEnsName } from 'wagmi';
import { useNavigate } from 'react-router-dom';
-import { ButtonSize } from '@/constants/buttons';
import { TransferType } from '@/constants/abacus';
-
+import { OnboardingState } from '@/constants/account';
+import { ButtonSize } from '@/constants/buttons';
+import { DialogTypes } from '@/constants/dialogs';
+import { STRING_KEYS } from '@/constants/localization';
+import { AppRoute, PortfolioRoute, HistoryRoute } from '@/constants/routes';
+import { wallets } from '@/constants/wallets';
+import { useAccounts, useStringGetter, useTokenConfigs } from '@/hooks';
+import { breakpoints } from '@/styles';
import { layoutMixins } from '@/styles/layoutMixins';
import { Details } from '@/components/Details';
@@ -16,13 +22,6 @@ import { IconButton, type IconButtonProps } from '@/components/IconButton';
import { Panel } from '@/components/Panel';
import { Toolbar } from '@/components/Toolbar';
-import { OnboardingState } from '@/constants/account';
-import { DialogTypes } from '@/constants/dialogs';
-import { STRING_KEYS } from '@/constants/localization';
-import { AppRoute, PortfolioRoute, HistoryRoute } from '@/constants/routes';
-import { wallets } from '@/constants/wallets';
-import { useAccounts, useStringGetter, useTokenConfigs } from '@/hooks';
-
import {
getHistoricalTradingRewardsForCurrentWeek,
getOnboardingState,
@@ -32,10 +31,12 @@ import { openDialog } from '@/state/dialogs';
import { isTruthy } from '@/lib/isTruthy';
import { truncateAddress } from '@/lib/wallet';
-import { DYDXBalancePanel } from './rewards/DYDXBalancePanel';
-import { MigratePanel } from './rewards/MigratePanel';
-import { GovernancePanel } from './rewards/GovernancePanel';
-import { StakingPanel } from './rewards/StakingPanel';
+import { DYDXBalancePanel } from './token/rewards/DYDXBalancePanel';
+import { MigratePanel } from './token/rewards/MigratePanel';
+import { GovernancePanel } from './token/rewards/GovernancePanel';
+import { StakingPanel } from './token/staking/StakingPanel';
+import { StrideStakingPanel } from './token/staking/StrideStakingPanel';
+import { NewMarketsPanel } from './token/rewards/NewMarketsPanel';
const ENS_CHAIN_ID = 1; // Ethereum
@@ -236,7 +237,9 @@ const Profile = () => {
+
+
);
};
@@ -249,11 +252,12 @@ Styled.MobileProfileLayout = styled.div`
${layoutMixins.contentContainerPage}
display: grid;
- grid-template-columns: 1fr 1fr;
gap: 1rem;
padding: 1.25rem 0.9rem;
max-width: 100vw;
+ grid-template-columns: 1fr 1fr;
+
grid-template-areas:
'header header'
'actions actions'
@@ -262,8 +266,23 @@ Styled.MobileProfileLayout = styled.div`
'balance balance'
'rewards fees'
'history history'
- 'governance governance'
- 'staking staking';
+ 'governance newMarkets'
+ 'keplr stride';
+
+ @media ${breakpoints.mobile} {
+ grid-template-areas:
+ 'header header'
+ 'actions actions'
+ 'settings help'
+ 'migrate migrate'
+ 'balance balance'
+ 'rewards fees'
+ 'history history'
+ 'governance governance'
+ 'newMarkets newMarkets'
+ 'keplr keplr'
+ 'stride stride';
+ }
`;
Styled.Header = styled.header`
@@ -431,5 +450,13 @@ Styled.GovernancePanel = styled(GovernancePanel)`
`;
Styled.StakingPanel = styled(StakingPanel)`
- grid-area: staking;
+ grid-area: keplr;
+`;
+
+Styled.NewMarketsPanel = styled(NewMarketsPanel)`
+ grid-area: newMarkets;
+`;
+
+Styled.StrideStakingPanel = styled(StrideStakingPanel)`
+ grid-area: stride;
`;
diff --git a/src/pages/portfolio/Portfolio.tsx b/src/pages/portfolio/Portfolio.tsx
index f3652b0..58aaeff 100644
--- a/src/pages/portfolio/Portfolio.tsx
+++ b/src/pages/portfolio/Portfolio.tsx
@@ -45,7 +45,8 @@ export default () => {
const { freeCollateral } = useSelector(getSubaccount, shallowEqual) || {};
const { nativeTokenBalance } = useAccountBalance();
- const { numTotalPositions, numTotalOpenOrders } = useSelector(getTradeInfoNumbers, shallowEqual) || {};
+ const { numTotalPositions, numTotalOpenOrders } =
+ useSelector(getTradeInfoNumbers, shallowEqual) || {};
const numPositions = shortenNumberForDisplay(numTotalPositions);
const numOrders = shortenNumberForDisplay(numTotalOpenOrders);
@@ -119,30 +120,43 @@ export default () => {
items: [
{
value: PortfolioRoute.Overview,
- slotBefore: ,
+ slotBefore: (
+
+
+
+ ),
label: stringGetter({ key: STRING_KEYS.OVERVIEW }),
href: PortfolioRoute.Overview,
},
{
value: PortfolioRoute.Positions,
- slotBefore: ,
+ slotBefore: (
+
+
+
+ ),
label: (
<>
{stringGetter({ key: STRING_KEYS.POSITIONS })}
- {numPositions > 0 && (
- {numPositions}
- )}
+ {numPositions &&
+ (typeof numPositions === 'string' || numPositions > 0) && (
+ {numPositions}
+ )}
>
),
href: PortfolioRoute.Positions,
},
{
value: PortfolioRoute.Orders,
- slotBefore: ,
+ slotBefore: (
+
+
+
+ ),
label: (
<>
{stringGetter({ key: STRING_KEYS.ORDERS })}
- {numOrders > 0 && (
+ {numOrders && (typeof numOrders === 'string' || numOrders > 0) && (
{numOrders}
)}
>
@@ -151,13 +165,21 @@ export default () => {
},
{
value: PortfolioRoute.Fees,
- slotBefore: ,
+ slotBefore: (
+
+
+
+ ),
label: stringGetter({ key: STRING_KEYS.FEES }),
href: PortfolioRoute.Fees,
},
{
value: PortfolioRoute.History,
- slotBefore: ,
+ slotBefore: (
+
+
+
+ ),
label: stringGetter({ key: STRING_KEYS.HISTORY }),
href: PortfolioRoute.History,
},
@@ -232,16 +254,14 @@ Styled.NavigationMenu = styled(NavigationMenu)`
padding-top: 0;
`;
-Styled.Icon = styled(Icon)`
- --icon-backgroundColor: var(--color-layer-4);
-
- width: 1em;
- height: 1em;
-
- margin-left: -0.25em;
-
- box-sizing: content-box;
- background-color: var(--icon-backgroundColor);
+Styled.IconContainer = styled.div`
+ width: 1.5rem;
+ height: 1.5rem;
+ font-size: 0.75rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: var(--color-layer-4);
border-radius: 50%;
- padding: 0.25em;
+ margin-left: -0.25rem;
`;
diff --git a/src/pages/token/Governance.tsx b/src/pages/token/Governance.tsx
new file mode 100644
index 0000000..1c0fe1f
--- /dev/null
+++ b/src/pages/token/Governance.tsx
@@ -0,0 +1,60 @@
+import styled, { AnyStyledComponent } from 'styled-components';
+
+import { STRING_KEYS } from '@/constants/localization';
+import { useStringGetter } from '@/hooks';
+import { breakpoints } from '@/styles';
+import { layoutMixins } from '@/styles/layoutMixins';
+
+import { DetachedSection } from '@/components/ContentSection';
+import { ContentSectionHeader } from '@/components/ContentSectionHeader';
+
+import { GovernancePanel } from './rewards/GovernancePanel';
+import { NewMarketsPanel } from './rewards/NewMarketsPanel';
+
+export default () => {
+ const stringGetter = useStringGetter();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const Styled: Record = {};
+
+Styled.HeaderSection = styled.section`
+ ${layoutMixins.contentSectionDetached}
+
+ @media ${breakpoints.tablet} {
+ ${layoutMixins.flexColumn}
+ gap: 1rem;
+
+ margin-bottom: 0.5rem;
+ }
+`;
+
+Styled.ContentWrapper = styled.div`
+ ${layoutMixins.flexColumn}
+ gap: 1.5rem;
+ max-width: 80rem;
+ padding: 0 1rem;
+`;
+
+Styled.Row = styled.div`
+ gap: 1rem;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+`;
diff --git a/src/pages/token/Token.tsx b/src/pages/token/Token.tsx
new file mode 100644
index 0000000..38cdc88
--- /dev/null
+++ b/src/pages/token/Token.tsx
@@ -0,0 +1,126 @@
+import { Suspense, lazy } from 'react';
+import { Navigate, Route, Routes } from 'react-router-dom';
+import styled, { AnyStyledComponent } from 'styled-components';
+
+import { STRING_KEYS } from '@/constants/localization';
+import { TokenRoute } from '@/constants/routes';
+import { useBreakpoints, useStringGetter } from '@/hooks';
+import { layoutMixins } from '@/styles/layoutMixins';
+
+import { Icon, IconName } from '@/components/Icon';
+import { LoadingSpace } from '@/components/Loading/LoadingSpinner';
+import { NavigationMenu } from '@/components/NavigationMenu';
+import { WithSidebar } from '@/components/WithSidebar';
+
+const RewardsPage = lazy(() => import('./rewards/RewardsPage'));
+const StakingPage = lazy(() => import('./staking/StakingPage'));
+const GovernancePage = lazy(() => import('./Governance'));
+
+export default () => {
+ const { isTablet } = useBreakpoints();
+ const stringGetter = useStringGetter();
+
+ const routesComponent = (
+ }>
+
+ } />
+ } />
+ } />
+ } />
+
+
+ );
+
+ return (
+
+
+
+
+ ),
+ label: stringGetter({ key: STRING_KEYS.TRADING_REWARDS }),
+ href: TokenRoute.TradingRewards,
+ },
+ {
+ value: TokenRoute.StakingRewards,
+ slotBefore: (
+
+
+
+ ),
+ label: 'Staking Rewards', // stringGetter({ key: STRING_KEYS.STAKING_REWARDS }),
+ href: TokenRoute.StakingRewards,
+ tag: stringGetter({ key: STRING_KEYS.NEW }),
+ },
+ {
+ value: TokenRoute.Governance,
+ slotBefore: (
+
+
+
+ ),
+ label: stringGetter({ key: STRING_KEYS.GOVERNANCE }),
+ href: TokenRoute.Governance,
+ },
+ ],
+ },
+ ]}
+ />
+
+ )
+ }
+ >
+ {routesComponent}
+
+ );
+};
+
+const Styled: Record = {};
+
+Styled.SideBar = styled.div`
+ ${layoutMixins.flexColumn}
+ justify-content: space-between;
+
+ height: 100%;
+`;
+
+Styled.Footer = styled.div`
+ ${layoutMixins.row}
+ flex-wrap: wrap;
+
+ padding: 1rem;
+
+ gap: 0.5rem;
+
+ > button {
+ flex-grow: 1;
+ }
+`;
+
+Styled.NavigationMenu = styled(NavigationMenu)`
+ padding: 0.5rem;
+ padding-top: 0;
+`;
+
+Styled.IconContainer = styled.div`
+ width: 1.5rem;
+ height: 1.5rem;
+ font-size: 0.75rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: var(--color-layer-4);
+ border-radius: 50%;
+ margin-left: -0.25rem;
+`;
diff --git a/src/pages/rewards/DYDXBalancePanel.tsx b/src/pages/token/rewards/DYDXBalancePanel.tsx
similarity index 100%
rename from src/pages/rewards/DYDXBalancePanel.tsx
rename to src/pages/token/rewards/DYDXBalancePanel.tsx
diff --git a/src/pages/rewards/GovernancePanel.tsx b/src/pages/token/rewards/GovernancePanel.tsx
similarity index 94%
rename from src/pages/rewards/GovernancePanel.tsx
rename to src/pages/token/rewards/GovernancePanel.tsx
index 2cfde09..6796a6a 100644
--- a/src/pages/rewards/GovernancePanel.tsx
+++ b/src/pages/token/rewards/GovernancePanel.tsx
@@ -14,13 +14,14 @@ import { Link } from '@/components/Link';
import { openDialog } from '@/state/dialogs';
-export const GovernancePanel = () => {
+export const GovernancePanel = ({ className }: { className?: string }) => {
const stringGetter = useStringGetter();
const dispatch = useDispatch();
const { governanceLearnMore } = useURLConfigs();
return (
{stringGetter({ key: STRING_KEYS.GOVERNANCE })}
}
@@ -72,4 +73,4 @@ Styled.Title = styled.h3`
font: var(--font-medium-book);
color: var(--color-text-2);
margin-bottom: -1rem;
-`;
\ No newline at end of file
+`;
diff --git a/src/pages/rewards/LaunchIncentivesPanel.tsx b/src/pages/token/rewards/LaunchIncentivesPanel.tsx
similarity index 96%
rename from src/pages/rewards/LaunchIncentivesPanel.tsx
rename to src/pages/token/rewards/LaunchIncentivesPanel.tsx
index c5283a7..3cb7334 100644
--- a/src/pages/rewards/LaunchIncentivesPanel.tsx
+++ b/src/pages/token/rewards/LaunchIncentivesPanel.tsx
@@ -28,7 +28,7 @@ import { log } from '@/lib/telemetry';
const SEASON_NUMBER = 2;
-export const LaunchIncentivesPanel = () => {
+export const LaunchIncentivesPanel = ({ className }: { className?: string }) => {
const { isNotTablet } = useBreakpoints();
const dispatch = useDispatch();
@@ -37,11 +37,15 @@ export const LaunchIncentivesPanel = () => {
}, []);
return isNotTablet ? (
- } slotRight={}>
+ }
+ slotRight={}
+ >
) : (
-
+
diff --git a/src/pages/rewards/MigratePanel.tsx b/src/pages/token/rewards/MigratePanel.tsx
similarity index 100%
rename from src/pages/rewards/MigratePanel.tsx
rename to src/pages/token/rewards/MigratePanel.tsx
diff --git a/src/pages/rewards/NewMarketsPanel.tsx b/src/pages/token/rewards/NewMarketsPanel.tsx
similarity index 94%
rename from src/pages/rewards/NewMarketsPanel.tsx
rename to src/pages/token/rewards/NewMarketsPanel.tsx
index a88d80b..26f0c2f 100644
--- a/src/pages/rewards/NewMarketsPanel.tsx
+++ b/src/pages/token/rewards/NewMarketsPanel.tsx
@@ -19,21 +19,22 @@ import { Tag } from '@/components/Tag';
import { MustBigNumber } from '@/lib/numbers';
import { layoutMixins } from '@/styles/layoutMixins';
-export const NewMarketsPanel = () => {
+export const NewMarketsPanel = ({ className }: { className?: string }) => {
const stringGetter = useStringGetter();
const navigate = useNavigate();
const { hasPotentialMarketsData } = usePotentialMarkets();
const { chainTokenDecimals, chainTokenLabel } = useTokenConfigs();
const { newMarketProposal } = useGovernanceVariables();
+ const initialDepositAmountDecimals = isMainnet ? 0 : 11;
const initialDepositAmountBN = MustBigNumber(newMarketProposal.initialDepositAmount).div(
Number(`1e${chainTokenDecimals}`)
);
- const initialDepositAmountDecimals = isMainnet ? 0 : chainTokenDecimals;
if (!hasPotentialMarketsData) return null;
return (
{stringGetter({ key: STRING_KEYS.ADD_A_MARKET })}
diff --git a/src/pages/rewards/RewardHistoryPanel.tsx b/src/pages/token/rewards/RewardHistoryPanel.tsx
similarity index 100%
rename from src/pages/rewards/RewardHistoryPanel.tsx
rename to src/pages/token/rewards/RewardHistoryPanel.tsx
diff --git a/src/pages/rewards/RewardsHelpPanel.tsx b/src/pages/token/rewards/RewardsHelpPanel.tsx
similarity index 100%
rename from src/pages/rewards/RewardsHelpPanel.tsx
rename to src/pages/token/rewards/RewardsHelpPanel.tsx
diff --git a/src/pages/rewards/RewardsPage.tsx b/src/pages/token/rewards/RewardsPage.tsx
similarity index 58%
rename from src/pages/rewards/RewardsPage.tsx
rename to src/pages/token/rewards/RewardsPage.tsx
index c68df83..b550f36 100644
--- a/src/pages/rewards/RewardsPage.tsx
+++ b/src/pages/token/rewards/RewardsPage.tsx
@@ -10,6 +10,8 @@ import { breakpoints } from '@/styles';
import { layoutMixins } from '@/styles/layoutMixins';
import { BackButton } from '@/components/BackButton';
+import { DetachedSection } from '@/components/ContentSection';
+import { ContentSectionHeader } from '@/components/ContentSectionHeader';
import { testFlags } from '@/lib/testFlags';
@@ -19,9 +21,6 @@ import { MigratePanel } from './MigratePanel';
import { RewardsHelpPanel } from './RewardsHelpPanel';
import { TradingRewardsSummaryPanel } from './TradingRewardsSummaryPanel';
import { RewardHistoryPanel } from './RewardHistoryPanel';
-import { GovernancePanel } from './GovernancePanel';
-import { StakingPanel } from './StakingPanel';
-import { NewMarketsPanel } from './NewMarketsPanel';
const RewardsPage = () => {
const stringGetter = useStringGetter();
@@ -29,46 +28,45 @@ const RewardsPage = () => {
const navigate = useNavigate();
return (
-
+
{isTablet && (
-
- navigate(AppRoute.Profile)} />
- {stringGetter({ key: STRING_KEYS.TRADING_REWARDS })}
-
+ navigate(AppRoute.Profile)} />}
+ />
)}
-
- {import.meta.env.VITE_V3_TOKEN_ADDRESS && isNotTablet && }
+
+
+ {import.meta.env.VITE_V3_TOKEN_ADDRESS && isNotTablet && }
- {isTablet ? (
-
- ) : (
- <>
+ {isTablet ? (
-
- >
- )}
+ ) : (
+ <>
+
+
+ >
+ )}
- {testFlags.showTradingRewards && (
-
-
- {isTablet && }
-
-
- )}
+ {testFlags.showTradingRewards && (
+
+
+ {isTablet && }
+
+
+ )}
- {isNotTablet && (
-
-
-
-
-
-
- )}
-
-
+ {isNotTablet && (
+
+
+
+ )}
+
+
+
);
};
@@ -76,27 +74,6 @@ export default RewardsPage;
const Styled: Record = {};
-Styled.Page = styled.div`
- ${layoutMixins.contentContainerPage}
- padding: 2rem;
- align-items: center;
-
- > * {
- --content-max-width: 80rem;
- max-width: min(calc(100vw - 4rem), var(--content-max-width));
- }
-
- @media ${breakpoints.tablet} {
- --stickyArea-topHeight: var(--page-header-height-mobile);
- padding: 0 1rem 1rem;
-
- > * {
- max-width: calc(100vw - 2rem);
- width: 100%;
- }
- }
-`;
-
Styled.MobileHeader = styled.header`
${layoutMixins.contentSectionDetachedScrollable}
${layoutMixins.stickyHeader}
@@ -113,6 +90,7 @@ Styled.GridLayout = styled.div<{ showTradingRewards?: boolean; showMigratePanel?
display: grid;
grid-template-columns: 2fr 1fr;
gap: var(--gap);
+ max-width: 80rem;
> * {
gap: var(--gap);
@@ -123,24 +101,39 @@ Styled.GridLayout = styled.div<{ showTradingRewards?: boolean; showMigratePanel?
? css`
grid-template-areas:
'migrate migrate'
- 'incentives balance'
+ 'incentives incentives'
+ 'balance balance'
'rewards other';
`
: showTradingRewards
? css`
- grid-template-areas: 'incentives balance' 'rewards other';
+ grid-template-areas:
+ 'incentives balance'
+ 'rewards other';
`
: showMigratePanel
? css`
- grid-template-areas: 'migrate migrate' 'incentives balance' 'other other';
+ grid-template-areas:
+ 'migrate migrate'
+ 'incentives incentives'
+ 'balance balance'
+ 'other other';
`
: css`
- grid-template-areas: 'incentives balance' 'other other';
+ grid-template-areas:
+ 'incentives balance'
+ 'other other';
`};
+ @media ${breakpoints.notTablet} {
+ padding: 1rem;
+ }
+
@media ${breakpoints.tablet} {
--gap: 1rem;
grid-template-columns: 1fr;
+ width: calc(100vw - 2rem);
+ margin: 0 auto;
${({ showTradingRewards }) =>
showTradingRewards
@@ -187,13 +180,3 @@ Styled.OtherColumn = styled.div<{ showTradingRewards?: boolean }>`
}
`}
`;
-
-Styled.RewardHistoryHeader = styled.div`
- h3 {
- font: var(--font-medium-book);
- color: var(--color-text-2);
- }
-
- padding: 1rem 1.5rem 0;
- margin-bottom: -0.5rem;
-`;
diff --git a/src/pages/rewards/TradingRewardsSummaryPanel.tsx b/src/pages/token/rewards/TradingRewardsSummaryPanel.tsx
similarity index 96%
rename from src/pages/rewards/TradingRewardsSummaryPanel.tsx
rename to src/pages/token/rewards/TradingRewardsSummaryPanel.tsx
index 13871bf..c76940a 100644
--- a/src/pages/rewards/TradingRewardsSummaryPanel.tsx
+++ b/src/pages/token/rewards/TradingRewardsSummaryPanel.tsx
@@ -3,8 +3,8 @@ import styled, { AnyStyledComponent } from 'styled-components';
import { shallowEqual, useSelector } from 'react-redux';
import { STRING_KEYS } from '@/constants/localization';
-import { layoutMixins } from '@/styles/layoutMixins';
import { useStringGetter, useTokenConfigs } from '@/hooks';
+import { layoutMixins } from '@/styles/layoutMixins';
import { AssetIcon } from '@/components/AssetIcon';
import { Details } from '@/components/Details';
@@ -18,7 +18,10 @@ import abacusStateManager from '@/lib/abacus';
export const TradingRewardsSummaryPanel = () => {
const stringGetter = useStringGetter();
const { chainTokenLabel } = useTokenConfigs();
- const currentWeekTradingReward = useSelector(getHistoricalTradingRewardsForCurrentWeek, shallowEqual);
+ const currentWeekTradingReward = useSelector(
+ getHistoricalTradingRewardsForCurrentWeek,
+ shallowEqual
+ );
useEffect(() => {
abacusStateManager.refreshHistoricalTradingRewards();
diff --git a/src/pages/token/staking/StakingPage.tsx b/src/pages/token/staking/StakingPage.tsx
new file mode 100644
index 0000000..ff95117
--- /dev/null
+++ b/src/pages/token/staking/StakingPage.tsx
@@ -0,0 +1,67 @@
+import styled, { AnyStyledComponent } from 'styled-components';
+
+import { breakpoints } from '@/styles';
+import { layoutMixins } from '@/styles/layoutMixins';
+
+import { DetachedSection } from '@/components/ContentSection';
+import { ContentSectionHeader } from '@/components/ContentSectionHeader';
+
+import { StakingPanel } from './StakingPanel';
+import { StrideStakingPanel } from './StrideStakingPanel';
+import { DYDXBalancePanel } from '../rewards/DYDXBalancePanel';
+
+export default () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const Styled: Record = {};
+
+Styled.HeaderSection = styled.section`
+ ${layoutMixins.contentSectionDetached}
+
+ @media ${breakpoints.tablet} {
+ ${layoutMixins.flexColumn}
+ gap: 1rem;
+
+ margin-bottom: 0.5rem;
+ }
+`;
+
+Styled.ContentWrapper = styled.div`
+ ${layoutMixins.flexColumn}
+ gap: 1.5rem;
+ max-width: 80rem;
+ padding: 0 1rem;
+`;
+
+Styled.Row = styled.div`
+ gap: 1rem;
+ display: grid;
+ grid-template-columns: 2fr 1fr;
+`;
+
+Styled.InnerRow = styled.div`
+ gap: 1rem;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ height: fit-content;
+`;
diff --git a/src/pages/rewards/StakingPanel.tsx b/src/pages/token/staking/StakingPanel.tsx
similarity index 67%
rename from src/pages/rewards/StakingPanel.tsx
rename to src/pages/token/staking/StakingPanel.tsx
index 9d2a1a6..4636a9e 100644
--- a/src/pages/rewards/StakingPanel.tsx
+++ b/src/pages/token/staking/StakingPanel.tsx
@@ -1,7 +1,6 @@
import styled, { AnyStyledComponent } from 'styled-components';
import { useDispatch } from 'react-redux';
-import { ButtonAction, ButtonSize } from '@/constants/buttons';
import { STRING_KEYS } from '@/constants/localization';
import { DialogTypes } from '@/constants/dialogs';
@@ -14,22 +13,19 @@ import { Link } from '@/components/Link';
import { openDialog } from '@/state/dialogs';
-export const StakingPanel = () => {
+export const StakingPanel = ({ className }: { className?: string }) => {
const stringGetter = useStringGetter();
const dispatch = useDispatch();
const { stakingLearnMore } = useURLConfigs();
return (
- {stringGetter({ key: STRING_KEYS.STAKING })}}
- slotRight={
-
-
-
+
+ Stake with Keplr
+
+
}
onClick={() => dispatch(openDialog({ type: DialogTypes.ExternalNavKeplr }))}
>
@@ -39,12 +35,40 @@ export const StakingPanel = () => {
{stringGetter({ key: STRING_KEYS.LEARN_MORE })} →
-
+
);
};
const Styled: Record = {};
+Styled.Panel = styled(Panel)`
+ align-items: start;
+
+ header {
+ justify-content: unset;
+ padding-bottom: 0;
+ }
+`;
+
+Styled.Header = styled.div`
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+`;
+
+Styled.Title = styled.h3`
+ font: var(--font-medium-book);
+ color: var(--color-text-2);
+`;
+
+Styled.Img = styled.img`
+ width: 2rem;
+ height: 2rem;
+ margin-left: 0.5rem;
+`;
+
Styled.Description = styled.div`
color: var(--color-text-0);
--link-color: var(--color-text-1);
@@ -61,13 +85,3 @@ Styled.IconButton = styled(IconButton)`
color: var(--color-text-0);
--color-border: var(--color-layer-6);
`;
-
-Styled.Arrow = styled.div`
- padding-right: 1.5rem;
-`;
-
-Styled.Title = styled.h3`
- font: var(--font-medium-book);
- color: var(--color-text-2);
- margin-bottom: -1rem;
-`;
diff --git a/src/pages/token/staking/StrideStakingPanel.tsx b/src/pages/token/staking/StrideStakingPanel.tsx
new file mode 100644
index 0000000..4eecd8e
--- /dev/null
+++ b/src/pages/token/staking/StrideStakingPanel.tsx
@@ -0,0 +1,94 @@
+import styled, { AnyStyledComponent } from 'styled-components';
+import { useDispatch } from 'react-redux';
+
+import { STRING_KEYS } from '@/constants/localization';
+import { DialogTypes } from '@/constants/dialogs';
+import { useStringGetter, useTokenConfigs, useURLConfigs } from '@/hooks';
+
+import { IconButton } from '@/components/IconButton';
+import { Link } from '@/components/Link';
+import { Panel } from '@/components/Panel';
+import { Tag } from '@/components/Tag';
+
+import { openDialog } from '@/state/dialogs';
+
+export const StrideStakingPanel = ({ className }: { className?: string }) => {
+ const stringGetter = useStringGetter();
+ const dispatch = useDispatch();
+ const { stakingLearnMore } = useURLConfigs();
+ const { chainTokenLabel } = useTokenConfigs();
+
+ return (
+
+
+ Liquid Stake with Stride
+ {stringGetter({ key: STRING_KEYS.NEW })}
+
+
+
+ }
+ onClick={() => dispatch(openDialog({ type: DialogTypes.ExternalNavStride }))}
+ >
+
+ {`Stake your ${chainTokenLabel} tokens for st${chainTokenLabel} which you can deploy around the ecosystem.`}
+ e.stopPropagation()}>
+ {stringGetter({ key: STRING_KEYS.LEARN_MORE })} →
+
+
+
+ );
+};
+
+const Styled: Record = {};
+
+Styled.Panel = styled(Panel)`
+ align-items: start;
+
+ header {
+ justify-content: unset;
+ padding-bottom: 0;
+ }
+`;
+
+Styled.Header = styled.div`
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+`;
+
+Styled.Title = styled.h3`
+ font: var(--font-medium-book);
+ color: var(--color-text-2);
+
+ display: flex;
+ align-items: center;
+ gap: 0.5ch;
+`;
+
+Styled.Img = styled.img`
+ width: 2rem;
+ height: 2rem;
+ margin-left: 0.5rem;
+`;
+
+Styled.Description = styled.div`
+ color: var(--color-text-0);
+ --link-color: var(--color-text-1);
+
+ a {
+ display: inline;
+ ::before {
+ content: ' ';
+ }
+ }
+`;
+
+Styled.IconButton = styled(IconButton)`
+ color: var(--color-text-0);
+ --color-border: var(--color-layer-6);
+`;
diff --git a/src/views/dialogs/ExternalLinkDialog.tsx b/src/views/dialogs/ExternalLinkDialog.tsx
index ae2bdb8..e7d8648 100644
--- a/src/views/dialogs/ExternalLinkDialog.tsx
+++ b/src/views/dialogs/ExternalLinkDialog.tsx
@@ -1,3 +1,4 @@
+import type { ReactNode } from 'react';
import styled, { type AnyStyledComponent } from 'styled-components';
import { ButtonAction, ButtonType } from '@/constants/buttons';
@@ -10,18 +11,26 @@ import { Dialog } from '@/components/Dialog';
import { layoutMixins } from '@/styles/layoutMixins';
type ElementProps = {
+ buttonText?: ReactNode;
link: string;
linkDescription?: string;
+ title?: ReactNode;
setIsOpen: (open: boolean) => void;
};
-export const ExternalLinkDialog = ({ setIsOpen, link, linkDescription }: ElementProps) => {
+export const ExternalLinkDialog = ({
+ setIsOpen,
+ buttonText,
+ link,
+ linkDescription,
+ title,
+}: ElementProps) => {
const stringGetter = useStringGetter();
return (
diff --git a/src/views/dialogs/ExternalNavStrideDialog.tsx b/src/views/dialogs/ExternalNavStrideDialog.tsx
new file mode 100644
index 0000000..cb5c584
--- /dev/null
+++ b/src/views/dialogs/ExternalNavStrideDialog.tsx
@@ -0,0 +1,137 @@
+import { useCallback } from 'react';
+import styled, { type AnyStyledComponent } from 'styled-components';
+import { useDispatch } from 'react-redux';
+
+import { ButtonAction, ButtonSize, ButtonType } from '@/constants/buttons';
+import { DialogTypes } from '@/constants/dialogs';
+import { STRING_KEYS } from '@/constants/localization';
+import { useBreakpoints, useStringGetter, useURLConfigs } from '@/hooks';
+import { layoutMixins } from '@/styles/layoutMixins';
+
+import { Button } from '@/components/Button';
+import { Dialog, DialogPlacement } from '@/components/Dialog';
+import { Icon, IconName } from '@/components/Icon';
+import { IconButton } from '@/components/IconButton';
+
+import { closeDialog, openDialog } from '@/state/dialogs';
+
+type ElementProps = {
+ setIsOpen: (open: boolean) => void;
+};
+
+export const ExternalNavStrideDialog = ({ setIsOpen }: ElementProps) => {
+ const stringGetter = useStringGetter();
+ const { strideZoneApp, accountExportLearnMore } = useURLConfigs();
+ const dispatch = useDispatch();
+ const { isTablet } = useBreakpoints();
+
+ const openExternalNavDialog = useCallback(() => {
+ dispatch(closeDialog());
+ dispatch(
+ openDialog({
+ type: DialogTypes.ExternalLink,
+ dialogProps: {
+ buttonText: (
+
+ Liquid Stake on Stride
+
+ ),
+ link: strideZoneApp,
+ title: 'Liquid staking and leaving website',
+ },
+ })
+ );
+ }, [dispatch]);
+
+ return (
+
+ );
+};
+
+const Styled: Record = {};
+
+Styled.TextToggle = styled.div`
+ ${layoutMixins.stickyFooter}
+ color: var(--color-accent);
+ cursor: pointer;
+
+ margin-top: auto;
+
+ &:hover {
+ text-decoration: underline;
+ }
+`;
+
+Styled.Content = styled.div`
+ ${layoutMixins.stickyArea0}
+ --stickyArea0-bottomHeight: 2rem;
+ --stickyArea0-bottomGap: 1rem;
+ --stickyArea0-totalInsetBottom: 0.5rem;
+
+ ${layoutMixins.flexColumn}
+ gap: 1rem;
+`;
+
+Styled.Button = styled(Button)`
+ --button-font: var(--font-base-book);
+ --button-padding: 0 1.5rem;
+
+ gap: 0;
+
+ justify-content: space-between;
+`;
+
+Styled.IconButton = styled(IconButton)`
+ color: var(--color-text-0);
+ --color-border: var(--color-layer-6);
+`;
+
+Styled.Span = styled.span`
+ display: flex;
+ align-items: center;
+ gap: 0.5ch;
+`;
diff --git a/src/views/menus/AccountMenu.tsx b/src/views/menus/AccountMenu.tsx
index af4cb80..f40b2b4 100644
--- a/src/views/menus/AccountMenu.tsx
+++ b/src/views/menus/AccountMenu.tsx
@@ -1,4 +1,4 @@
-import { memo } from 'react';
+import { ElementType, memo } from 'react';
import styled, { AnyStyledComponent, css } from 'styled-components';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import type { Dispatch } from '@reduxjs/toolkit';
@@ -106,7 +106,7 @@ export const AccountMenu = () => {
{walletType && (
-
+
)}
@@ -220,7 +220,7 @@ export const AccountMenu = () => {
{onboardingState === OnboardingState.WalletConnected ? (
) : onboardingState === OnboardingState.AccountConnected ? (
- walletType &&
+ walletType &&
) : null}
{!isTablet && {truncateAddress(dydxAddress)}}
From bd788f22e87fe3779c7f2caad99d3e78d135ecd7 Mon Sep 17 00:00:00 2001
From: Jared Vu
Date: Wed, 7 Feb 2024 14:22:12 -0800
Subject: [PATCH 16/19] Restore env format (#288)
* restore formatting
* copy from prev commit
---
public/configs/env.json | 2621 ++++++++++++++++++++-------------------
1 file changed, 1319 insertions(+), 1302 deletions(-)
diff --git a/public/configs/env.json b/public/configs/env.json
index b94740f..9b6f2ff 100644
--- a/public/configs/env.json
+++ b/public/configs/env.json
@@ -1,1315 +1,1332 @@
{
- "apps": {
- "ios": {
- "scheme": "dydx-t-v4"
- }
- },
- "deployments": {
- "MAINNET": {
- "environments": ["dydxprotocol-mainnet"],
- "default": "dydxprotocol-mainnet"
- },
- "TESTFLIGHT": {
- "environments": ["dydxprotocol-mainnet", "dydxprotocol-testnet"],
- "default": "dydxprotocol-mainnet"
- },
- "TESTNET": {
- "environments": ["dydxprotocol-testnet"],
- "default": "dydxprotocol-testnet"
- },
- "DEV": {
- "environments": [
- "dydxprotocol-dev",
- "dydxprotocol-dev-2",
- "dydxprotocol-dev-4",
- "dydxprotocol-dev-5",
- "dydxprotocol-staging",
- "dydxprotocol-staging-west",
- "dydxprotocol-testnet",
- "dydxprotocol-testnet-dydx",
- "dydxprotocol-testnet-nodefleet",
- "dydxprotocol-testnet-kingnodes",
- "dydxprotocol-testnet-liquify",
- "dydxprotocol-testnet-polkachu",
- "dydxprotocol-testnet-bware"
- ],
- "default": "dydxprotocol-testnet"
- }
- },
- "environments": {
- "dydxprotocol-dev": {
- "name": "v4 Dev",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4dev.dydx.exchange",
- "socket": "wss://indexer.v4dev.dydx.exchange"
- }
- ],
- "validators": ["https://validator.v4dev.dydx.exchange"],
- "0xsquid": "https://testnet.api.0xsquid.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4dev.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
+ "apps": {
+ "ios": {
+ "scheme": "dydx-t-v4"
}
- },
- "dydxprotocol-dev-2": {
- "name": "v4 Dev 2",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
+ },
+ "deployments": {
+ "MAINNET": {
+ "environments": [
+ "dydxprotocol-mainnet"
+ ],
+ "default": "dydxprotocol-mainnet"
},
- "endpoints": {
- "indexers": [
- {
- "api": "http://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com",
- "socket": "ws://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com"
- }
- ],
- "validators": ["http://54.92.118.111"],
- "0xsquid": "https://testnet.api.0xsquid.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ "TESTFLIGHT": {
+ "environments": [
+ "dydxprotocol-mainnet",
+ "dydxprotocol-testnet"
+ ],
+ "default": "dydxprotocol-mainnet"
},
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ "TESTNET": {
+ "environments": [
+ "dydxprotocol-testnet"
+ ],
+ "default": "dydxprotocol-testnet"
},
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
+ "DEV": {
+ "environments": [
+ "dydxprotocol-dev",
+ "dydxprotocol-dev-2",
+ "dydxprotocol-dev-4",
+ "dydxprotocol-dev-5",
+ "dydxprotocol-staging",
+ "dydxprotocol-staging-west",
+ "dydxprotocol-testnet",
+ "dydxprotocol-testnet-dydx",
+ "dydxprotocol-testnet-nodefleet",
+ "dydxprotocol-testnet-kingnodes",
+ "dydxprotocol-testnet-liquify",
+ "dydxprotocol-testnet-polkachu",
+ "dydxprotocol-testnet-bware"
+ ],
+ "default": "dydxprotocol-testnet"
}
- },
- "dydxprotocol-dev-4": {
- "name": "v4 Dev 4",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
+ },
+ "environments": {
+ "dydxprotocol-dev": {
+ "name": "v4 Dev",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4dev.dydx.exchange",
+ "socket": "wss://indexer.v4dev.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://validator.v4dev.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.0xsquid.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4dev.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
},
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4dev4.dydx.exchange",
- "socket": "wss://indexer.v4dev4.dydx.exchange"
- }
- ],
- "validators": ["https://validator.v4dev4.dydx.exchange"],
- "0xsquid": "https://testnet.api.0xsquid.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4dev4.dydx.exchange"
+ "dydxprotocol-dev-2": {
+ "name": "v4 Dev 2",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "http://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com",
+ "socket": "ws://dev2-indexer-apne1-lb-public-2076363889.ap-northeast-1.elb.amazonaws.com"
+ }
+ ],
+ "validators": [
+ "http://54.92.118.111"
+ ],
+ "0xsquid": "https://testnet.api.0xsquid.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
},
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ "dydxprotocol-dev-4": {
+ "name": "v4 Dev 4",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4dev4.dydx.exchange",
+ "socket": "wss://indexer.v4dev4.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://validator.v4dev4.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.0xsquid.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4dev4.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
},
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
+ "dydxprotocol-dev-5": {
+ "name": "v4 Dev 5",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "http://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com",
+ "socket": "ws://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com"
+ }
+ ],
+ "validators": [
+ "http://18.223.78.50"
+ ],
+ "0xsquid": "https://testnet.api.0xsquid.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
},
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
+ "dydxprotocol-staging": {
+ "name": "v4 Staging",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4staging.dydx.exchange",
+ "socket": "wss://indexer.v4staging.dydx.exchange"
+ }
+ ],
+ "faucet": "https://faucet.v4staging.dydx.exchange",
+ "validators": [
+ "https://validator.v4staging.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "help": "https://help.dydx.exchange",
+ "foundation": "https://www.dydx.foundation",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
},
- "featureFlags": {
- "reduceOnlySupported": true
+ "dydxprotocol-staging-forced-update": {
+ "name": "v4 Staging Forced Update",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4staging.dydx.exchange",
+ "socket": "wss://indexer.v4staging.dydx.exchange"
+ }
+ ],
+ "faucet": "https://faucet.v4staging.dydx.exchange",
+ "validators": [
+ "https://validator.v4staging.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://v4-teacher.vercel.app/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "apps": {
+ "ios": {
+ "minimalVersion": "1.0",
+ "build": 40000,
+ "url": "https://apps.apple.com/app/dydx/id1564787350"
+ }
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
+ },
+ "dydxprotocol-staging-west": {
+ "name": "v4 Staging West",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydxprotocol-testnet",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4staging.dydx.exchange",
+ "socket": "wss://indexer.v4staging.dydx.exchange"
+ }
+ ],
+ "faucet": "https://faucet.v4staging.dydx.exchange",
+ "validators": [
+ "https://validator-uswest1.v4staging.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "help": "https://help.dydx.exchange",
+ "foundation": "https://www.dydx.foundation",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": true
+ }
+ },
+ "dydxprotocol-testnet": {
+ "name": "v4 Public Testnet",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://dydx-testnet-full-rpc.public.blastapi.io/",
+ "https://dydx-testnet-rpc.polkachu.com/",
+ "https://dydx-testnet.nodefleet.org",
+ "https://test-dydx.kingnodes.com",
+ "https://dydx-rpc.liquify.com/api=8878132/dydx"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-dydx": {
+ "name": "v4 Public Testnet/dYdX",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://validator.v4testnet.dydx.exchange"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-nodefleet": {
+ "name": "v4 Public Testnet/nodefleet",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://dydx-testnet.nodefleet.org"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-kingnodes": {
+ "name": "v4 Public Testnet/KingNodes",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://test-dydx.kingnodes.com"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-liquify": {
+ "name": "v4 Public Testnet/Liquify",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://dydx-rpc.liquify.com/api=8878132/dydx"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnMore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnMore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
+ "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-polkachu": {
+ "name": "v4 Public Testnet/Polkahcu",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://dydx-testnet-rpc.polkachu.com/"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-testnet-bware": {
+ "name": "v4 Public Testnet/BWare",
+ "ethereumChainId": "11155111",
+ "dydxChainId": "dydx-testnet-4",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "dYdX-api",
+ "isMainNet": false,
+ "tokens": {
+ "chain": {
+ "name": "Dv4TNT",
+ "denom": "adv4tnt",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "https://indexer.v4testnet.dydx.exchange",
+ "socket": "wss://indexer.v4testnet.dydx.exchange"
+ }
+ ],
+ "validators": [
+ "https://dydx-testnet-full-rpc.public.blastapi.io/"
+ ],
+ "0xsquid": "https://testnet.api.squidrouter.com",
+ "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
+ "faucet": "https://faucet.v4testnet.dydx.exchange"
+ },
+ "links": {
+ "tos": "https://dydx.exchange/v4-terms",
+ "privacy": "https://dydx.exchange/privacy",
+ "statusPage": "https://status.v4testnet.dydx.exchange/",
+ "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
+ "documentation": "https://docs.dydx.exchange/",
+ "community": "https://discord.com/invite/dydx",
+ "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
+ "blogs": "https://www.dydx.foundation/blog",
+ "foundation": "https://www.dydx.foundation",
+ "help": "https://help.dydx.exchange/",
+ "reduceOnlyLearnmore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
+ "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
+ "governanceLearnmore": "https://help.dydx.exchange",
+ "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
+ "stakingLearnmore": "https://help.dydx.exchange",
+ "keplrDashboard": "https://testnet.keplr.app/",
+ "strideZoneApp": "https://testnet.stride.zone",
+ "accountExportLearnmore": "https://help.dydx.exchange",
+ "walletLearnmore": "https://www.dydx.academy/video/defi-wallet"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "dYdX v4",
+ "description": "dYdX v4 App",
+ "iconUrl": "/logos/dydx-x.png"
+ },
+ "v2": {
+ "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "/walletsegue"
+ },
+ "images": "/wallets/",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX V4"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 10000000,
+ "delayBlocks": 900,
+ "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
+ },
+ "dydxprotocol-mainnet": {
+ "name": "v4",
+ "ethereumChainId": "1",
+ "dydxChainId": "[mainnet chain id]",
+ "chainName": "dYdX Chain",
+ "chainLogo": "/dydx-chain.png",
+ "squidIntegratorId": "[mainnet squid integrator id]",
+ "isMainNet": true,
+ "tokens": {
+ "comment": "Change according to mainnet release",
+ "chain": {
+ "name": "TokenName",
+ "denom": "tokenDenom",
+ "decimals": 18,
+ "image": "/currencies/dydx.png"
+ },
+ "usdc": {
+ "name": "USDC",
+ "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
+ "gasDenom": "uusdc",
+ "decimals": 6,
+ "image": "/currencies/usdc.png"
+ }
+ },
+ "endpoints": {
+ "indexers": [
+ {
+ "api": "[REST endpoint]",
+ "socket": "[Websocket endpoint]"
+ }
+ ],
+ "validators": [
+ "[Validator endpoint 1",
+ "[Validator endpoint n]"
+ ],
+ "0xsquid": "[0xSquid endpoint for mainnet]",
+ "nobleValidator": "[noble validator endpoint for mainnet]"
+ },
+ "links": {
+ "tos": "[HTTP link to TOS]",
+ "privacy": "[HTTP link to Privacy Policy]",
+ "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]",
+ "mintscanBase": "[HTTP link to TOS mintscan base url]",
+ "feedback": "[HTTP link to feedback form, can be null]",
+ "blogs": "[HTTP link to blogs, can be null]",
+ "foundation": "[HTTP link to foundation, can be null]",
+ "reduceOnlyLearnMore": "[HTTP link to reduce-only learn more, can be null]",
+ "documentation": "[HTTP link to documentation, can be null]",
+ "community": "[HTTP link to community, can be null]",
+ "help": "[HTTP link to help page, can be null]",
+ "governanceLearnMore": "[HTTP link to governance learn more, can be null]",
+ "newMarketProposalLearnMore": "[HTTP link to new market proposal learn more, can be null]",
+ "stakingLearnMore": "[HTTP link to staking learn more, can be null]",
+ "keplrDashboard": "[HTTP link to keplr dashboard, can be null]",
+ "strideZoneApp": "[HTTP link to stride zone app, can be null]",
+ "accountExportLearnMore": "[HTTP link to account export learn more, can be null]",
+ "walletLearnMore": "[HTTP link to wallet learn more, can be null]"
+ },
+ "wallets": {
+ "walletconnect": {
+ "client": {
+ "name": "[Name of the app]",
+ "description": "[Description of the app]",
+ "iconUrl": "[Relative URL of the icon URL]"
+ },
+ "v2": {
+ "projectId": "[Project ID]"
+ }
+ },
+ "walletSegue": {
+ "callbackUrl": "[Relative callback URL for WalletSegue, should match apple-app-site-association]"
+ },
+ "images": "[Relative URL for wallet images]",
+ "signTypedDataAction": "dYdX Chain Onboarding",
+ "signTypedDataDomainName": "dYdX Chain"
+ },
+ "governance": {
+ "newMarketProposal": {
+ "initialDepositAmount": 0,
+ "delayBlocks": 0,
+ "newMarketsMethodology": "[URL to spreadsheet or document that explains methodology]"
+ }
+ },
+ "featureFlags": {
+ "reduceOnlySupported": false
+ }
}
- },
- "dydxprotocol-dev-5": {
- "name": "v4 Dev 5",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "http://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com",
- "socket": "ws://dev5-indexer-apne1-lb-public-1721328151.ap-northeast-1.elb.amazonaws.com"
- }
- ],
- "validators": ["http://18.223.78.50"],
- "0xsquid": "https://testnet.api.0xsquid.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
- }
- },
- "dydxprotocol-staging": {
- "name": "v4 Staging",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4staging.dydx.exchange",
- "socket": "wss://indexer.v4staging.dydx.exchange"
- }
- ],
- "faucet": "https://faucet.v4staging.dydx.exchange",
- "validators": ["https://validator.v4staging.dydx.exchange"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "help": "https://help.dydx.exchange",
- "foundation": "https://www.dydx.foundation",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
- }
- },
- "dydxprotocol-staging-forced-update": {
- "name": "v4 Staging Forced Update",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4staging.dydx.exchange",
- "socket": "wss://indexer.v4staging.dydx.exchange"
- }
- ],
- "faucet": "https://faucet.v4staging.dydx.exchange",
- "validators": ["https://validator.v4staging.dydx.exchange"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "apps": {
- "ios": {
- "minimalVersion": "1.0",
- "build": 40000,
- "url": "https://apps.apple.com/app/dydx/id1564787350"
- }
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
- }
- },
- "dydxprotocol-staging-west": {
- "name": "v4 Staging West",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydxprotocol-testnet",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4staging.dydx.exchange",
- "socket": "wss://indexer.v4staging.dydx.exchange"
- }
- ],
- "faucet": "https://faucet.v4staging.dydx.exchange",
- "validators": ["https://validator-uswest1.v4staging.dydx.exchange"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "help": "https://help.dydx.exchange",
- "foundation": "https://www.dydx.foundation",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": true
- }
- },
- "dydxprotocol-testnet": {
- "name": "v4 Public Testnet",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": [
- "https://dydx-testnet-full-rpc.public.blastapi.io/",
- "https://dydx-testnet-rpc.polkachu.com/",
- "https://dydx-testnet.nodefleet.org",
- "https://test-dydx.kingnodes.com",
- "https://dydx-rpc.liquify.com/api=8878132/dydx"
- ],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-dydx": {
- "name": "v4 Public Testnet/dYdX",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://validator.v4testnet.dydx.exchange"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-nodefleet": {
- "name": "v4 Public Testnet/nodefleet",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://dydx-testnet.nodefleet.org"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-kingnodes": {
- "name": "v4 Public Testnet/KingNodes",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://test-dydx.kingnodes.com"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-liquify": {
- "name": "v4 Public Testnet/Liquify",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://dydx-rpc.liquify.com/api=8878132/dydx"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-polkachu": {
- "name": "v4 Public Testnet/Polkahcu",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://dydx-testnet-rpc.polkachu.com/"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnMore": "https://help.dydx.exchange",
- "stakingLearnMore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "walletLearnMore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-testnet-bware": {
- "name": "v4 Public Testnet/BWare",
- "ethereumChainId": "11155111",
- "dydxChainId": "dydx-testnet-4",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "dYdX-api",
- "isMainNet": false,
- "tokens": {
- "chain": {
- "name": "Dv4TNT",
- "denom": "adv4tnt",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "https://indexer.v4testnet.dydx.exchange",
- "socket": "wss://indexer.v4testnet.dydx.exchange"
- }
- ],
- "validators": ["https://dydx-testnet-full-rpc.public.blastapi.io/"],
- "0xsquid": "https://testnet.api.squidrouter.com",
- "nobleValidator": "https://noble-testnet-rpc.polkachu.com/",
- "faucet": "https://faucet.v4testnet.dydx.exchange"
- },
- "links": {
- "tos": "https://dydx.exchange/v4-terms",
- "privacy": "https://dydx.exchange/privacy",
- "statusPage": "https://status.v4testnet.dydx.exchange/",
- "mintscan": "https://testnet.mintscan.io/dydx-testnet/txs/{tx_hash}",
- "documentation": "https://docs.dydx.exchange/",
- "community": "https://discord.com/invite/dydx",
- "feedback": "https://docs.google.com/forms/d/e/1FAIpQLSezLsWCKvAYDEb7L-2O4wOON1T56xxro9A2Azvl6IxXHP_15Q/viewform",
- "blogs": "https://www.dydx.foundation/blog",
- "foundation": "https://www.dydx.foundation",
- "help": "https://help.dydx.exchange/",
- "reduceOnlyLearnmore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders",
- "mintscanBase": "https://testnet.mintscan.io/dydx-testnet",
- "governanceLearnmore": "https://help.dydx.exchange",
- "newMarketProposalLearnMore": "https://dydx.exchange/blog/new-market-proposals",
- "stakingLearnmore": "https://help.dydx.exchange",
- "keplrDashboard": "https://testnet.keplr.app/",
- "strideZoneApp": "https://testnet.stride.zone/",
- "accountExportLearnmore": "https://help.dydx.exchange",
- "walletLearnmore": "https://www.dydx.academy/video/defi-wallet"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "dYdX v4",
- "description": "dYdX v4 App",
- "iconUrl": "/logos/dydx-x.png"
- },
- "v2": {
- "projectId": "47559b2ec96c09aed9ff2cb54a31ab0e"
- }
- },
- "walletSegue": {
- "callbackUrl": "/walletsegue"
- },
- "images": "/wallets/",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX V4"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 10000000,
- "delayBlocks": 900,
- "newMarketsMethodology": "https://docs.google.com/spreadsheets/d/1zjkV9R7R_7KMItuzqzvKGwefSBRfE-ZNAx1LH55OcqY/edit?usp=sharing"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- },
- "dydxprotocol-mainnet": {
- "name": "v4",
- "ethereumChainId": "1",
- "dydxChainId": "[mainnet chain id]",
- "chainName": "dYdX Chain",
- "chainLogo": "/dydx-chain.png",
- "squidIntegratorId": "[mainnet squid integrator id]",
- "isMainNet": true,
- "tokens": {
- "comment": "Change according to mainnet release",
- "chain": {
- "name": "TokenName",
- "denom": "tokenDenom",
- "decimals": 18,
- "image": "/currencies/dydx.png"
- },
- "usdc": {
- "name": "USDC",
- "denom": "ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5",
- "gasDenom": "uusdc",
- "decimals": 6,
- "image": "/currencies/usdc.png"
- }
- },
- "endpoints": {
- "indexers": [
- {
- "api": "[REST endpoint]",
- "socket": "[Websocket endpoint]"
- }
- ],
- "validators": ["[Validator endpoint 1", "[Validator endpoint n]"],
- "0xsquid": "[0xSquid endpoint for mainnet]",
- "nobleValidator": "[noble validator endpoint for mainnet]"
- },
- "links": {
- "tos": "[HTTP link to TOS]",
- "privacy": "[HTTP link to Privacy Policy]",
- "mintscan": "[HTTP link to Mintscan, with {tx_hash} placeholder]",
- "mintscanBase": "[HTTP link to TOS mintscan base url]",
- "feedback": "[HTTP link to feedback form, can be null]",
- "blogs": "[HTTP link to blogs, can be null]",
- "foundation": "[HTTP link to foundation, can be null]",
- "reduceOnlyLearnMore": "[HTTP link to reduce-only learn more, can be null]",
- "documentation": "[HTTP link to documentation, can be null]",
- "community": "[HTTP link to community, can be null]",
- "help": "[HTTP link to help page, can be null]",
- "governanceLearnMore": "[HTTP link to governance learn more, can be null]",
- "newMarketProposalLearnMore": "[HTTP link to new market proposal learn more, can be null]",
- "stakingLearnMore": "[HTTP link to staking learn more, can be null]",
- "keplrDashboard": "[HTTP link to keplr dashboard, can be null]",
- "strideZoneApp": "[HTTP link to Stride zone app, can be null]",
- "accountExportLearnMore": "[HTTP link to account export learn more, can be null]",
- "walletLearnMore": "[HTTP link to wallet learn more, can be null]"
- },
- "wallets": {
- "walletconnect": {
- "client": {
- "name": "[Name of the app]",
- "description": "[Description of the app]",
- "iconUrl": "[Relative URL of the icon URL]"
- },
- "v2": {
- "projectId": "[Project ID]"
- }
- },
- "walletSegue": {
- "callbackUrl": "[Relative callback URL for WalletSegue, should match apple-app-site-association]"
- },
- "images": "[Relative URL for wallet images]",
- "signTypedDataAction": "dYdX Chain Onboarding",
- "signTypedDataDomainName": "dYdX Chain"
- },
- "governance": {
- "newMarketProposal": {
- "initialDepositAmount": 0,
- "delayBlocks": 0,
- "newMarketsMethodology": "[URL to spreadsheet or document that explains methodology]"
- }
- },
- "featureFlags": {
- "reduceOnlySupported": false
- }
- }
- }
+ }
}
From 5fb2f278daad92ad5fb742dbce4688cc061b5dc7 Mon Sep 17 00:00:00 2001
From: Jared Vu
Date: Thu, 8 Feb 2024 06:44:50 -0800
Subject: [PATCH 17/19] Liquid staking language and localization (#289)
* :pencil2: Liquid staking language and localization
* import nits
---
package.json | 2 +-
pnpm-lock.yaml | 14 ++++++---
src/hooks/usePotentialMarkets.tsx | 2 +-
src/pages/token/Governance.tsx | 2 +-
src/pages/token/Token.tsx | 2 +-
src/pages/token/staking/StakingPage.tsx | 7 +++--
src/pages/token/staking/StakingPanel.tsx | 2 +-
.../token/staking/StrideStakingPanel.tsx | 7 +++--
src/views/dialogs/ExternalLinkDialog.tsx | 3 ++
src/views/dialogs/ExternalNavKeplrDialog.tsx | 31 +++++++++++++++++--
src/views/dialogs/ExternalNavStrideDialog.tsx | 20 +++++++++---
11 files changed, 71 insertions(+), 21 deletions(-)
diff --git a/package.json b/package.json
index 9e3446d..79ec326 100644
--- a/package.json
+++ b/package.json
@@ -42,7 +42,7 @@
"@cosmjs/tendermint-rpc": "^0.32.1",
"@dydxprotocol/v4-abacus": "^1.4.2",
"@dydxprotocol/v4-client-js": "^1.0.20",
- "@dydxprotocol/v4-localization": "^1.1.25",
+ "@dydxprotocol/v4-localization": "^1.1.26",
"@ethersproject/providers": "^5.7.2",
"@js-joda/core": "^5.5.3",
"@radix-ui/react-accordion": "^1.1.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 41d3607..eac9ab3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -36,8 +36,8 @@ dependencies:
specifier: ^1.0.20
version: 1.0.20
'@dydxprotocol/v4-localization':
- specifier: ^1.1.25
- version: 1.1.25
+ specifier: ^1.1.26
+ version: 1.1.26
'@ethersproject/providers':
specifier: ^5.7.2
version: 5.7.2
@@ -1323,8 +1323,8 @@ packages:
- utf-8-validate
dev: false
- /@dydxprotocol/v4-localization@1.1.25:
- resolution: {integrity: sha512-84BJMybnZBrRnDpnHlMUcOYT1r0ODtgcdgrjdzTw8b0sViTY6ne9ob690fcn/vQO+6sEdDsdt+08ud0H+ZvyYg==}
+ /@dydxprotocol/v4-localization@1.1.26:
+ resolution: {integrity: sha512-u+J1J5Up8McwZOcDaG9GrH/A8p4vD2NU2CT2hPdYyKgEd28XeAYvv7bNAQRKdiBaqTePbbF5uB6TMAQnEGnb1A==}
dev: false
/@dydxprotocol/v4-proto@4.0.0-dev.0:
@@ -8882,7 +8882,7 @@ packages:
resolution: {integrity: sha512-WIdaQ8uW1vIbYvNnAVunkC6yxTrneJC7VQ5UUQ0kuw8b0C0A39KTIpoQHCfc8tV7o9vF4niwRhdXEdfAgQEsQQ==}
dependencies:
cosmos-directory-types: 0.0.6
- node-fetch-native: 1.6.1
+ node-fetch-native: 1.6.2
dev: false
/cosmos-directory-types@0.0.6:
@@ -12892,6 +12892,10 @@ packages:
resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==}
dev: false
+ /node-fetch-native@1.6.2:
+ resolution: {integrity: sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==}
+ dev: false
+
/node-fetch@2.6.12:
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
engines: {node: 4.x || >=6.0.0}
diff --git a/src/hooks/usePotentialMarkets.tsx b/src/hooks/usePotentialMarkets.tsx
index af1a9d8..443900b 100644
--- a/src/hooks/usePotentialMarkets.tsx
+++ b/src/hooks/usePotentialMarkets.tsx
@@ -88,7 +88,7 @@ export const usePotentialMarketsContext = () => {
impactNotional: 10_000,
},
1: {
- label: 'Mid-cap',
+ label: stringGetter({ key: STRING_KEYS.MID_CAP }),
initialMarginFraction: 0.1,
maintenanceMarginFraction: 0.05,
impactNotional: 5_000,
diff --git a/src/pages/token/Governance.tsx b/src/pages/token/Governance.tsx
index 1c0fe1f..723f0ec 100644
--- a/src/pages/token/Governance.tsx
+++ b/src/pages/token/Governance.tsx
@@ -19,7 +19,7 @@ export default () => {
diff --git a/src/pages/token/Token.tsx b/src/pages/token/Token.tsx
index 38cdc88..6471f21 100644
--- a/src/pages/token/Token.tsx
+++ b/src/pages/token/Token.tsx
@@ -59,7 +59,7 @@ export default () => {
),
- label: 'Staking Rewards', // stringGetter({ key: STRING_KEYS.STAKING_REWARDS }),
+ label: stringGetter({ key: STRING_KEYS.STAKING_REWARDS }),
href: TokenRoute.StakingRewards,
tag: stringGetter({ key: STRING_KEYS.NEW }),
},
diff --git a/src/pages/token/staking/StakingPage.tsx b/src/pages/token/staking/StakingPage.tsx
index ff95117..91b9096 100644
--- a/src/pages/token/staking/StakingPage.tsx
+++ b/src/pages/token/staking/StakingPage.tsx
@@ -5,18 +5,21 @@ import { layoutMixins } from '@/styles/layoutMixins';
import { DetachedSection } from '@/components/ContentSection';
import { ContentSectionHeader } from '@/components/ContentSectionHeader';
+import { useStringGetter } from '@/hooks';
import { StakingPanel } from './StakingPanel';
import { StrideStakingPanel } from './StrideStakingPanel';
import { DYDXBalancePanel } from '../rewards/DYDXBalancePanel';
+import { STRING_KEYS } from '@/constants/localization';
export default () => {
+ const stringGetter = useStringGetter();
return (
diff --git a/src/pages/token/staking/StakingPanel.tsx b/src/pages/token/staking/StakingPanel.tsx
index 4636a9e..1b934c7 100644
--- a/src/pages/token/staking/StakingPanel.tsx
+++ b/src/pages/token/staking/StakingPanel.tsx
@@ -23,7 +23,7 @@ export const StakingPanel = ({ className }: { className?: string }) => {
className={className}
slotHeaderContent={
- Stake with Keplr
+ {stringGetter({ key: STRING_KEYS.STAKE_WITH_KEPLR })}
}
diff --git a/src/pages/token/staking/StrideStakingPanel.tsx b/src/pages/token/staking/StrideStakingPanel.tsx
index 4eecd8e..e100523 100644
--- a/src/pages/token/staking/StrideStakingPanel.tsx
+++ b/src/pages/token/staking/StrideStakingPanel.tsx
@@ -24,7 +24,7 @@ export const StrideStakingPanel = ({ className }: { className?: string }) => {
slotHeaderContent={
- Liquid Stake with Stride
+ {stringGetter({ key: STRING_KEYS.LIQUID_STAKE_W_STRIDE })}
{stringGetter({ key: STRING_KEYS.NEW })}
@@ -33,7 +33,10 @@ export const StrideStakingPanel = ({ className }: { className?: string }) => {
onClick={() => dispatch(openDialog({ type: DialogTypes.ExternalNavStride }))}
>
- {`Stake your ${chainTokenLabel} tokens for st${chainTokenLabel} which you can deploy around the ecosystem.`}
+ {stringGetter({
+ key: STRING_KEYS.LIQUID_STAKE_STRIDE_DESCRIPTION,
+ params: { TOKEN_DENOM: chainTokenLabel },
+ })}
e.stopPropagation()}>
{stringGetter({ key: STRING_KEYS.LEARN_MORE })} →
diff --git a/src/views/dialogs/ExternalLinkDialog.tsx b/src/views/dialogs/ExternalLinkDialog.tsx
index e7d8648..231cb24 100644
--- a/src/views/dialogs/ExternalLinkDialog.tsx
+++ b/src/views/dialogs/ExternalLinkDialog.tsx
@@ -15,6 +15,7 @@ type ElementProps = {
link: string;
linkDescription?: string;
title?: ReactNode;
+ slotContent?: ReactNode;
setIsOpen: (open: boolean) => void;
};
@@ -24,6 +25,7 @@ export const ExternalLinkDialog = ({
link,
linkDescription,
title,
+ slotContent,
}: ElementProps) => {
const stringGetter = useStringGetter();
return (
@@ -36,6 +38,7 @@ export const ExternalLinkDialog = ({
}
>
+ {slotContent}
{stringGetter({ key: STRING_KEYS.LEAVING_WEBSITE_DISCLAIMER })}.