{"version":3,"file":"static/js/main.a45ece67.js","mappings":"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,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,GACRr9B,KAAM,cACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGVQ,KAAM,kBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,KACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,iCACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,YACdt9B,KAAM,UACNR,KAAM,aAER,CACE89B,aAAc,YACdt9B,KAAM,SACNR,KAAM,aAER,CACE89B,aAAc,WACdt9B,KAAM,aACNR,KAAM,YAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B,KAAM,oBACNR,KAAM,UAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,YAGV89B,aAAc,gDACdt9B,KAAM,GACNR,KAAM,UAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGVQ,KAAM,mBACNu9B,QAAS,CACP,CACED,aAAc,uCACdt9B,KAAM,GACNR,KAAM,UAGVg+B,gBAAiB,OACjBh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B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,YAGVQ,KAAM,mBACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,c,oKC7HV,cAKakqC,EAAAA,W,6DACX,SACE9nB,EACAub,GAEA,OAAO,IAAIP,EAAAA,SAAShb,EAASwb,EAAMD,O,EAL1BuM,GAAbpU,EAAAA,6BAAAA,EASA,IAAM8H,EAAO,CACX,CACEC,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,KACNR,KAAM,WAER,CACE89B,aAAc,6BACdt9B,KAAM,aACNR,KAAM,YAGVQ,KAAM,cACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,oBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,+BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,KACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,iCACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,YACdt9B,KAAM,UACNR,KAAM,aAER,CACE89B,aAAc,YACdt9B,KAAM,SACNR,KAAM,aAER,CACE89B,aAAc,WACdt9B,KAAM,aACNR,KAAM,YAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B,KAAM,oBACNR,KAAM,UAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,uCACdt9B,KAAM,gBACNR,KAAM,UAGV89B,aAAc,2CACdt9B,KAAM,gBACNR,KAAM,UAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,QACNR,KAAM,WAER,CACE89B,aAAc,6BACdt9B,KAAM,aACNR,KAAM,YAGVQ,KAAM,eACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,oBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,+BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,KACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,iCACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,YACdt9B,KAAM,UACNR,KAAM,aAER,CACE89B,aAAc,YACdt9B,KAAM,SACNR,KAAM,aAER,CACE89B,aAAc,WACdt9B,KAAM,aACNR,KAAM,YAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B,KAAM,oBACNR,KAAM,UAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UA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CTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,sDACdt9B,KAAM,iBACNR,KAAM,UAGVQ,KAAM,iBACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,sDACdt9B,KAAM,iBACNR,KAAM,SAER,CACE89B,aAAc,UACdt9B,KAAM,QACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,IACNR,KAAM,SAER,CACE89B,aAAc,UACdt9B,KAAM,IACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,IACNR,KAAM,YAGVQ,KAAM,sBACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,YACNR,KAAM,WAER,CACE89B,aAAc,sDACdt9B,KAAM,iBACNR,KAAM,UAGVQ,KAAM,qBACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,WAER,CACE89B,aAAc,sDACdt9B,KAAM,iBACNR,KAAM,UAGVQ,KAAM,kBACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,sDACdt9B,KAAM,iBACNR,KAAM,UAGVQ,KAAM,kBACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACE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CN,CACEC,aAAc,SACdt9B,KAAM,eACNR,KAAM,UAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,QACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGVg+B,gBAAiB,aACjBh+B,KAAM,eAER,CACE69B,OAAQ,GACRr9B,KAAM,UACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,GACRr9B,KAAM,eACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,eACNR,KAAM,YAGVQ,KAAM,aACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,aACNR,KAAM,SAGVQ,KAAM,MACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,GACRr9B,KAAM,cACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,SACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,aACNR,KAAM,SAGVQ,KAAM,iBACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YA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R,KAAM,YAGVQ,KAAM,SACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B,KAAM,eACNR,KAAM,WAGVQ,KAAM,UACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,YACdt9B,KAAM,SACNR,KAAM,aAER,CACE89B,aAAc,YACdt9B,KAAM,UACNR,KAAM,aAER,CACE89B,aAAc,YACdt9B,KAAM,QACNR,KAAM,aAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,SACNR,KAAM,SAER,CACE89B,aAAc,SACdt9B,KAAM,eACNR,KAAM,WAGVQ,KAAM,YACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,aACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,OACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,iBACNR,KAAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,gBACNR,KAAM,SAGVQ,KAAM,kBACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,UACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGVQ,KAAM,QACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aA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,UACdt9B,KAAM,QACNR,KAAM,YAGVQ,KAAM,aACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,GACRr9B,KAAM,cACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,QACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,YAGVQ,KAAM,OACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,cACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,YAGVQ,KAAM,WACNu9B,QAAS,GACTC,gBAAiB,UACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,QACNR,KAAM,YAGVQ,KAAM,MACNu9B,QAAS,CACP,CACED,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,QACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,YACNR,KAAM,YAGVQ,KAAM,cACNu9B,QAAS,GACTC,gBAAiB,aACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,SACNR,KAAM,WAER,CACE8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8H,EAAO,CACX,CACEC,OAAQ,GACRr9B,KAAM,wBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGV89B,aAAc,0CACdt9B,KAAM,GACNR,KAAM,SAER,CACE89B,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,GACRr9B,KAAM,wBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGV89B,aAAc,0CACdt9B,KAAM,GACNR,KAAM,UAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,iBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGV89B,aAAc,mCACdt9B,KAAM,GACNR,KAAM,UAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,qBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,YAGV89B,aAAc,uCACdt9B,KAAM,GACNR,KAAM,UAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,qBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,YAGV89B,aAAc,uCACdt9B,KAAM,GACNR,KAAM,SAER,CACE89B,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,gBACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,aACNR,KAAM,YAGV89B,aAAc,mCACdt9B,KAAM,GACNR,KAAM,SAER,CACE89B,aAAc,UACdt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,c,+OCxaV,UACA,kCACA,WAMA,WAKA,WACA,WAMA,WAEA,WAEA,WAmDam0B,EAAAA,SAAAA,G,gCAYX,WACEnmB,EACA8kC,GAA0C,M,EAAA,kBAE1C,cAAM9kC,EAAU+kC,EAAAA,uBAEXhX,aAAe,IAAIyR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AER,CACE89B,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,+BACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,iBACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,kBACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,kBACNR,KAAM,UAGV89B,aACE,kEACFt9B,KAAM,GACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,UAGV89B,aAAc,mDACdt9B,KAAM,2BACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,UAGV89B,aAAc,mDACdt9B,KAAM,4BACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,UAGV89B,aAAc,mDACdt9B,KAAM,4BACNR,KAAM,UAGV89B,aACE,4DACFt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,yCACdt9B,KAAM,WACNR,KAAM,YAGVQ,KAAM,4BACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,iBACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,kBACNR,KAAM,SAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,wBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAAM,SAER,CACE89B,aAAc,QACdt9B,KAAM,YACNR,KAAM,UAGV89B,aAAc,+CACdt9B,KAAM,kBACNR,KAAM,UAGV89B,aACE,kEACFt9B,KAAM,GACNR,KAAM,YAGVg+B,gBAAiB,OACjBh+B,KAAM,YAER,CACE69B,OAAQ,CACN,CACEC,aAAc,yCACdt9B,KAAM,WACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,OACNR,KAAM,YAGVQ,KAAM,gCACNu9B,QAAS,CACP,CACE+I,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,kBACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,uBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,eACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,6BACNR,KAAM,WAER,CACE89B,aAAc,QACdt9B,KAAM,sBACNR,KAA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AAM,WAER,CACE89B,aAAc,OACdt9B,KAAM,2BACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,mBACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,0BACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,OACdt9B,KAAM,WACNR,KAAM,QAER,CACE89B,aAAc,UACdt9B,KAAM,iBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,sBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B,KAAM,sBACNR,KAAM,UAER,CACE89B,aAAc,UACdt9B,KAAM,gBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,yBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,8BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,2BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,oBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,gCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,0BACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,iCACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,qBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,WAER,CACE89B,aAAc,UACdt9B,KAAM,mBACNR,KAAM,YAGV89B,aAAc,uDACdt9B,KAAM,GACNR,KAAM,WAER,CACE8mC,WAAY,CACV,CACEhJ,aAAc,UACdt9B,KAAM,8BACNR,KAAM,WAER,CACE89B,aAAc,SACdt9B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","sources":["../webpack/runtime/chunk loaded","../webpack/runtime/create fake namespace object","../webpack/runtime/load script","../webpack/runtime/css loading","assets/img/symbols/bai.svg","assets/img/symbols/symbol_wallet_polkadot.svg","assets/img/symbols/symbol_wallet_talisman.svg","assets/img/symbols/symbol_wallet_subwallet.svg","assets/img/icon-setting.svg","component/TopHeader/MobileDraw.tsx","component/TopHeader/ConnectDropDown.tsx","component/TopHeader/SettingDropDown.tsx","component/TopHeader/index.tsx","component/TableList/DesktopTable.tsx","component/TableList/MobileTable.tsx","component/TableList/index.tsx","component/Statistic/index.tsx","component/StateMessage/index.tsx","constants/assets.ts","constants/config.ts","hook/app/useAppSetting.tsx","assets/img/icon_arrow-right.svg","constants/error.ts","component/modal/MessageModal.tsx","hook/contracts/useLendingPool.ts","libs/lending-pool/index.ts","libs/leverager/index.ts","utils/estimationHelper.ts","component/modal/dashboard/ListItem.tsx","utils/gtm.ts","hook/useTracking.ts","component/modal/dashboard/BorrowModal.tsx","component/modal/dashboard/SupplyModal.tsx","component/modal/dashboard/ClaimModal.tsx","component/modal/dashboard/CollateralModal.tsx","component/modal/public/PurchaseModal.tsx","component/modal/WrapModal.tsx","component/modal/ConnectWalletModal.tsx","hook/app/useModalContext.tsx","hook/app/useNavigate.tsx","hook/app/useRoutesArr.tsx","hook/useGasPrice.ts","hook/contracts/txHandler.ts","hook/useMarketData/converters.ts","hook/useMarketData/index.ts","hook/usePoolDataProvider.ts","libs/stake-ui-helper/index.ts","hook/useStakeData.ts","libs/static-rpc-provider/index.ts","hook/useStaticRPCProvider.ts","hook/useUserData.ts","libs/config/chain.ts","hook/useWallet.ts","hook/base/useSWRLocal.ts","libs/wallet-balance-provider/index.ts","hook/useWalletBalance.ts","assets/img/footer-peck.svg","component/MissConnectWallet/MissNetwork.tsx","component/MissConnectWallet/MissConnectWallet.tsx","assets/img/footer-astar.svg","component/Footer/index.tsx","App.tsx","reportWebVitals.ts","index.tsx","libs/config/market.ts","libs/config/staken.ts","libs/config/faucet.ts","libs/config/index.ts","libs/config/network.ts","locales/index.ts","libs/i18n-provider/index.tsx","libs/pool-data-provider/converters/constants.ts","libs/pool-data-provider/converters/reserves.ts","libs/pool-data-provider/converters/userReserves.ts","libs/pool-data-provider/providers/contract/index.ts","libs/pool-data-provider/index.ts","libs/staken/index.ts","libs/wallet-provider/providers/metamask.ts","libs/wallet-provider/index.ts","libs/wallet-provider/providers/safe.ts","locales/en/messages.js","locales/id/messages.js","locales/ja/messages.js","locales/ko/messages.js","locales/ru/messages.js","locales/tr/messages.js","locales/vi/messages.js","locales/zh/messages.js","utils/string.ts","utils/address.ts","utils/assets.ts","utils/calculator.ts","utils/env.ts","utils/localStorage.ts","utils/number.ts","../submodule/packages/contract-helpers/src/baseDebtToken-contract/index.ts","../submodule/packages/contract-helpers/src/baseDebtToken-contract/typechain/IDebtTokenBase__factory.ts","../submodule/packages/contract-helpers/src/commons/BaseService.ts","../submodule/packages/contract-helpers/src/commons/gasStation.ts","../submodule/packages/contract-helpers/src/commons/ipfs.ts","../submodule/packages/contract-helpers/src/commons/types.ts","../submodule/packages/contract-helpers/src/commons/utils.ts","../submodule/packages/contract-helpers/src/commons/validators/methodValidators.ts","../submodule/packages/contract-helpers/src/commons/validators/paramValidators.ts","../submodule/packages/contract-helpers/src/commons/validators/validations.ts","../submodule/packages/contract-helpers/src/debtErc20-contract/index.ts","../submodule/packages/contract-helpers/src/debtErc20-contract/typechain/DebtERC20__factory.ts","../submodule/packages/contract-helpers/src/erc20-contract/index.ts","../submodule/packages/contract-helpers/src/erc20-contract/typechain/IERC20Detailed__factory.ts","../submodule/packages/contract-helpers/src/faucet/index.ts","../submodule/packages/contract-helpers/src/faucet/typechain/IFaucet__factory.ts","../submodule/packages/contract-helpers/src/governance-contract/index.ts","../submodule/packages/contract-helpers/src/governance-contract/typechain/IAaveGovernanceV2__factory.ts","../submodule/packages/contract-helpers/src/governance-contract/typechain/IGovernanceStrategy__factory.ts","../submodule/packages/contract-helpers/src/governance-contract/typechain/IGovernanceV2Helper__factory.ts","../submodule/packages/contract-helpers/src/governance-contract/types.ts","../submodule/packages/contract-helpers/src/governance-power-delegation-contract/index.ts","../submodule/packages/contract-helpers/src/governance-power-delegation-contract/typechain/IGovernancePowerDelegationToken__factory.ts","../submodule/packages/contract-helpers/src/incentive-controller/index.ts","../submodule/packages/contract-helpers/src/incentive-controller/typechain/ISiO2IncentivesController__factory.ts","../submodule/packages/contract-helpers/src/index.ts","../submodule/packages/contract-helpers/src/launchpad/index.ts","../submodule/packages/contract-helpers/src/launchpad/typechain/Launchpad__factory.ts","../submodule/packages/contract-helpers/src/lendingPool-contract/index.ts","../submodule/packages/contract-helpers/src/lendingPool-contract/typechain/ILendingPool__factory.ts","../submodule/packages/contract-helpers/src/leverager/index.ts","../submodule/packages/contract-helpers/src/leverager/typechain/Leverager__factory.ts","../submodule/packages/contract-helpers/src/leverager/utils.ts","../submodule/packages/contract-helpers/src/permissions-manager/index.ts","../submodule/packages/contract-helpers/src/permissions-manager/typechain/PermissionManagerFactory.ts","../submodule/packages/contract-helpers/src/permissions-manager/types/PermissionManagerTypes.ts","../submodule/packages/contract-helpers/src/price-aggregator-adapter/index.ts","../submodule/packages/contract-helpers/src/price-aggregator-adapter/typechain/IPriceAggregatorAdapterFactory.ts","../submodule/packages/contract-helpers/src/stake-ui-helper/index.ts","../submodule/packages/contract-helpers/src/stake-ui-helper/typechain/StakeUiHelper__factory.ts","../submodule/packages/contract-helpers/src/staking-contract/index.ts","../submodule/packages/contract-helpers/src/staking-contract/typechain/ISiO2StakingHelper__factory.ts","../submodule/packages/contract-helpers/src/staking-contract/typechain/StakedToken__factory.ts","../submodule/packages/contract-helpers/src/synthetix-contract/index.ts","../submodule/packages/contract-helpers/src/synthetix-contract/typechain/ISynthetix__factory.ts","../submodule/packages/contract-helpers/src/ui-incentive-data-provider/index.ts","../submodule/packages/contract-helpers/src/ui-incentive-data-provider/typechain/UiIncentiveDataProviderFactory.ts","../submodule/packages/contract-helpers/src/ui-pool-data-provider/index.ts","../submodule/packages/contract-helpers/src/ui-pool-data-provider/typechain/UiPoolDataProviderFactory.ts","../submodule/packages/contract-helpers/src/wallet-balance-provider/index.ts","../submodule/packages/contract-helpers/src/wallet-balance-provider/typechain/WalletBalanceProviderFactory.ts","../submodule/packages/contract-helpers/src/wethgateway-contract/index.ts","../submodule/packages/contract-helpers/src/wethgateway-contract/typechain/IWETHGateway__factory.ts","../submodule/packages/math-utils/src/bignumber.ts","../submodule/packages/math-utils/src/constants.ts","../submodule/packages/math-utils/src/formatters/compounded-interest/calculate-compounded-interest.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-accrued-incentives.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-all-reserve-incentives.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-all-user-incentives.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-incentive-apr.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-reserve-incentives.ts","../submodule/packages/math-utils/src/formatters/incentive/calculate-user-reserve-incentives.ts","../submodule/packages/math-utils/src/formatters/incentive/index.ts","../submodule/packages/math-utils/src/formatters/reserve/calculate-reserve-debt.ts","../submodule/packages/math-utils/src/formatters/reserve/index.ts","../submodule/packages/math-utils/src/formatters/usd/native-to-usd.ts","../submodule/packages/math-utils/src/formatters/user/calculate-supplies.ts","../submodule/packages/math-utils/src/formatters/user/calculate-user-reserve-totals.ts","../submodule/packages/math-utils/src/formatters/user/format-user-reserve.ts","../submodule/packages/math-utils/src/formatters/user/generate-raw-user-summary.ts","../submodule/packages/math-utils/src/formatters/user/generate-user-reserve-summary.ts","../submodule/packages/math-utils/src/formatters/user/index.ts","../submodule/packages/math-utils/src/index.ts","../submodule/packages/math-utils/src/pool-math.ts","../submodule/packages/math-utils/src/ray.math.ts","locales|lazy|/^/.//.*//messages/.po$/|groupOptions: {}|namespace object","../webpack/bootstrap","../webpack/runtime/amd options","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"frontend:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"19\":1,\"214\":1,\"661\":1,\"852\":1,\"857\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","var _circle, _path, _g, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgBai(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 623,\n height: 693,\n viewBox: \"0 0 623 693\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 298.5,\n cy: 354.5,\n r: 270.5,\n fill: \"black\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M207 517.5V193H316C347.833 193.667 411.5 210.6 411.5 273C411.5 318.392 387.614 332.931 376.082 339.95L376 340C403.5 348.521 444.3 390.9 425.5 452.5C407.951 510 344 517.5 327 517.5H207ZM338 293C338 314.539 320.539 332 299 332C277.461 332 260 314.539 260 293C260 271.461 277.461 254 299 254C320.539 254 338 271.461 338 293ZM346 422C346 447.957 324.957 469 299 469C273.043 469 252 447.957 252 422C252 396.043 273.043 375 299 375C324.957 375 346 396.043 346 422Z\",\n fill: \"#FFF846\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_d_853_23)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M207 348V344C207 342.5 207 344.5 207 341.768C178.468 352.387 133.351 371.448 116.383 396.624C79.8609 450.814 137.465 453.455 200.738 451.61C264.011 449.766 411.754 387.124 446.626 364.872C478.993 344.218 537.57 296.875 430.554 304.908C434.497 305.537 504.055 304.305 474.487 332.018C429.119 374.541 230.858 430.881 168.588 419.316C118.773 410.065 182.904 364.524 207 348Z\",\n fill: \"#F9C53A\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_d_853_23\",\n x: 75,\n y: 274,\n width: 507,\n height: 268,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dx: 30,\n dy: 30\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 30\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_853_23\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_853_23\",\n result: \"shape\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBai);\nexport default __webpack_public_path__ + \"static/media/bai.89fcf296f2652aca426bf4635fe250a6.svg\";\nexport { ForwardRef as ReactComponent };","var _rect, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSymbolWalletPolkadot(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 20,\n height: 20,\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n y: 0.00012207,\n width: 20,\n height: 19.9999,\n fill: \"url(#pattern0)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_3854_17677\",\n transform: \"scale(0.00505051)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_3854_17677\",\n width: 198,\n height: 198,\n xlinkHref: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMYAAADGCAYAAACJm/9dAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDA2IDc5LjE2NDY0OCwgMjAyMS8wMS8xMi0xNTo1MjoyOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIyLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0E5NkYxRDQ2NDYyMTFFQkEzQUM5Rjk2RkIwMThCN0EiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0E5NkYxRDU2NDYyMTFFQkEzQUM5Rjk2RkIwMThCN0EiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxODJCNURGRjY0NjIxMUVCQTNBQzlGOTZGQjAxOEI3QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxODJCNUUwMDY0NjIxMUVCQTNBQzlGOTZGQjAxOEI3QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjFcYagAABsiSURBVHja7F0J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\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSymbolWalletPolkadot);\nexport default __webpack_public_path__ + \"static/media/symbol_wallet_polkadot.f3f8c6ccb18e3e2c6099b9d9ac732680.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSymbolWalletTalisman(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 20,\n viewBox: \"0 0 21 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.1567 11.1442C16.3468 11.5583 16.9071 11.7046 17.2293 11.3825L17.8196 10.7921C17.9642 10.6445 18.1366 10.527 18.3269 10.4464C18.5173 10.3658 18.7217 10.3237 18.9284 10.3226C19.1351 10.3215 19.3399 10.3614 19.5311 10.44C19.7223 10.5185 19.896 10.6342 20.0421 10.7802C20.1883 10.9263 20.304 11.0999 20.3826 11.291C20.4612 11.4821 20.5011 11.6868 20.5 11.8934C20.4989 12.1 20.4568 12.3043 20.3762 12.4945C20.2955 12.6848 20.178 12.8572 20.0303 13.0017L15.2567 17.7737C14.6702 18.4718 13.9377 19.033 13.1109 19.4176C12.2841 19.8022 11.3829 20.001 10.4709 20C9.52054 20.0008 8.58253 19.7848 7.72839 19.3683C6.87421 18.9518 6.12651 18.3458 5.54222 17.5967L0.946163 13.0021C0.658148 12.708 0.497829 12.3122 0.500022 11.9007C0.502215 11.4892 0.666742 11.0952 0.957873 10.8042C1.24901 10.5132 1.64324 10.3488 2.05495 10.3466C2.46667 10.3444 2.86263 10.5046 3.15685 10.7925L3.73881 11.3742C4.05396 11.6892 4.6009 11.5475 4.78684 11.1425C4.82394 11.0625 4.84395 10.9767 4.84395 10.8887V3.75C4.84395 3.3356 5.00866 2.93817 5.3018 2.64515C5.59499 2.35212 5.99261 2.1875 6.40723 2.1875C6.82181 2.1875 7.21947 2.35212 7.51262 2.64515C7.80581 2.93817 7.97051 3.3356 7.97051 3.75V7.36166C7.97051 7.67208 8.28859 7.88291 8.58499 7.78958C8.77258 7.73 8.90848 7.55958 8.90848 7.36291V1.5625C8.90848 1.1481 9.07319 0.750671 9.36633 0.457646C9.65952 0.16462 10.0571 0 10.4718 0C10.8863 0 11.284 0.16462 11.5771 0.457646C11.8703 0.750671 12.035 1.1481 12.035 1.5625V7.3625C12.035 7.55958 12.1705 7.73 12.3577 7.78916C12.6541 7.88291 12.9726 7.67208 12.9726 7.36166V3.75C12.9726 3.3356 13.1373 2.93817 13.4304 2.64515C13.7236 2.35212 14.1213 2.1875 14.5359 2.1875C14.9505 2.1875 15.3481 2.35212 15.6413 2.64515C15.9344 2.93817 16.0992 3.3356 16.0992 3.75V10.8854C16.0992 10.975 16.1192 11.0625 16.1567 11.1442Z\",\n fill: \"#FF3D23\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.2726 14.2239C15.2726 14.2239 13.0327 17.3489 10.2701 17.3489C7.50745 17.3489 5.26758 14.2239 5.26758 14.2239C5.26758 14.2239 7.50745 11.0989 10.2701 11.0989C13.0327 11.0989 15.2726 14.2239 15.2726 14.2239Z\",\n fill: \"#D5FF5C\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.619 14.2243C12.6232 14.5352 12.5655 14.8438 12.4493 15.1322C12.3332 15.4207 12.1608 15.6831 11.9423 15.9045C11.7239 16.1257 11.4636 16.3015 11.1766 16.4214C10.8896 16.5413 10.5816 16.6031 10.2705 16.6031C9.95947 16.6031 9.65153 16.5413 9.36455 16.4214C9.07753 16.3015 8.81724 16.1257 8.59875 15.9045C8.38027 15.6831 8.20793 15.4207 8.09179 15.1322C7.97561 14.8438 7.91795 14.5352 7.92208 14.2243C7.93029 13.6072 8.18138 13.0181 8.62089 12.5847C9.0604 12.1512 9.65307 11.9081 10.2705 11.9081C10.888 11.9081 11.4807 12.1512 11.9202 12.5847C12.3598 13.0181 12.6108 13.6072 12.619 14.2243Z\",\n stroke: \"#FF3D23\",\n strokeWidth: 0.299184\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.6808 14.2236C11.6808 14.4088 11.6443 14.5921 11.5734 14.7632C11.5025 14.9342 11.3986 15.0897 11.2676 15.2206C11.1366 15.3515 10.9811 15.4554 10.8099 15.5263C10.6388 15.5971 10.4553 15.6336 10.2701 15.6336C10.0848 15.6336 9.9014 15.5971 9.73023 15.5263C9.5591 15.4554 9.40356 15.3515 9.27258 15.2206C9.14156 15.0897 9.03767 14.9342 8.96676 14.7632C8.89589 14.5921 8.85938 14.4088 8.85938 14.2236C8.85938 13.8496 9.00803 13.491 9.27258 13.2266C9.53713 12.9621 9.89593 12.8136 10.2701 12.8136C10.6442 12.8136 11.0031 12.9621 11.2676 13.2266C11.5322 13.491 11.6808 13.8496 11.6808 14.2236Z\",\n stroke: \"#FF3D23\",\n strokeWidth: 0.299184\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.5565 14.224C13.5614 14.6585 13.48 15.0896 13.317 15.4924C13.1541 15.8952 12.9128 16.2617 12.6071 16.5707C12.3014 16.8797 11.9375 17.125 11.5363 17.2924C11.1352 17.4598 10.7048 17.546 10.27 17.546C9.83532 17.546 9.4049 17.4598 9.00374 17.2924C8.60258 17.125 8.23865 16.8797 7.933 16.5707C7.62734 16.2617 7.38601 15.8952 7.22306 15.4924C7.0601 15.0896 6.97873 14.6585 6.98361 14.224C6.99336 13.3592 7.34391 12.5332 7.95918 11.9251C8.57444 11.317 9.40477 10.976 10.27 10.976C11.1353 10.976 11.9657 11.317 12.5809 11.9251C13.1962 12.5332 13.5467 13.3592 13.5565 14.224Z\",\n stroke: \"#FF3D23\",\n strokeWidth: 0.299184\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.4941 14.2231C14.4941 16.5552 12.6028 18.4456 10.2695 18.4456C7.93628 18.4456 6.04492 16.5552 6.04492 14.2231C6.04492 11.891 7.93628 10.0006 10.2695 10.0006C12.6028 10.0006 14.4941 11.891 14.4941 14.2231Z\",\n stroke: \"#FF3D23\",\n strokeWidth: 0.299184\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.7431 14.2241C10.745 14.2873 10.7342 14.3502 10.7113 14.4092C10.6884 14.4681 10.6539 14.5218 10.6098 14.5672C10.5657 14.6126 10.513 14.6487 10.4547 14.6733C10.3965 14.6979 10.3339 14.7106 10.2706 14.7106C10.2073 14.7106 10.1447 14.6979 10.0865 14.6733C10.0282 14.6487 9.97544 14.6126 9.93138 14.5672C9.88731 14.5218 9.85284 14.4681 9.82991 14.4092C9.80702 14.3502 9.79618 14.2873 9.79806 14.2241C9.80173 14.1012 9.85309 13.9847 9.9413 13.8991C10.0295 13.8135 10.1477 13.7656 10.2706 13.7656C10.3935 13.7656 10.5117 13.8135 10.5999 13.8991C10.6881 13.9847 10.7395 14.1012 10.7431 14.2241Z\",\n fill: \"#162BEB\",\n stroke: \"#FF3D23\",\n strokeWidth: 0.299184\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.2698 14.8495C10.6152 14.8495 10.8952 14.5697 10.8952 14.2245C10.8952 13.8793 10.6152 13.5995 10.2698 13.5995C9.9245 13.5995 9.64453 13.8793 9.64453 14.2245C9.64453 14.5697 9.9245 14.8495 10.2698 14.8495Z\",\n fill: \"#FF3D23\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.48983 14.2642C5.47949 14.2508 5.4692 14.2373 5.45898 14.2238L5.49025 14.1834C5.55528 14.0996 5.652 13.9792 5.77664 13.835C6.10285 13.4574 6.4559 13.1037 6.833 12.7767C7.72928 12.0034 8.94447 11.2517 10.2706 11.2517C11.5966 11.2517 12.8118 12.0034 13.7081 12.7767C14.1988 13.2026 14.6483 13.6735 15.0509 14.1834L15.0821 14.2238L15.0509 14.2642C14.6483 14.7741 14.1988 15.245 13.7081 15.6709C12.8118 16.4438 11.5966 17.1959 10.2706 17.1959C8.94447 17.1959 7.72928 16.4438 6.833 15.6709C6.34234 15.245 5.89278 14.7741 5.49025 14.2642H5.48983Z\",\n stroke: \"#D5FF5C\",\n strokeWidth: 0.299184\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSymbolWalletTalisman);\nexport default __webpack_public_path__ + \"static/media/symbol_wallet_talisman.4a5726d81e20f4bd874093f94b353921.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _defs;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSymbolWalletSubwallet(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 21,\n height: 22,\n viewBox: \"0 0 21 22\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.8325 0.619995H0.408203V21.3801H20.8325V0.619995Z\",\n fill: \"url(#pattern0)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"pattern0\",\n patternContentUnits: \"objectBoundingBox\",\n width: 1,\n height: 1\n }, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#image0_3854_17678\",\n transform: \"matrix(0.00758917 0 0 0.00746269 -0.00847458 0)\"\n })), /*#__PURE__*/React.createElement(\"image\", {\n id: \"image0_3854_17678\",\n width: 134,\n height: 134,\n xlinkHref: \"data:image/png;base64,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\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSymbolWalletSubwallet);\nexport default __webpack_public_path__ + \"static/media/symbol_wallet_subwallet.64c06cf0dcfec80ab4729fc13a3ec475.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconSetting(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 19C14.7866 19 13.6927 18.2691 13.2284 17.1481C12.764 16.027 13.0207 14.7367 13.8787 13.8787C14.7367 13.0207 16.027 12.764 17.1481 13.2284C18.2691 13.6927 19 14.7866 19 16C19 16.7956 18.6839 17.5587 18.1213 18.1213C17.5587 18.6839 16.7956 19 16 19ZM8 19C6.34315 19 5 17.6569 5 16C5 14.3431 6.34315 13 8 13C9.65685 13 11 14.3431 11 16C11 16.7956 10.6839 17.5587 10.1213 18.1213C9.55871 18.6839 8.79565 19 8 19ZM16 11C14.3431 11 13 9.65685 13 8C13 6.34315 14.3431 5 16 5C17.6569 5 19 6.34315 19 8C19 9.65685 17.6569 11 16 11ZM8 11C6.34315 11 5 9.65685 5 8C5 6.34315 6.34315 5 8 5C9.65685 5 11 6.34315 11 8C11 8.79565 10.6839 9.55871 10.1213 10.1213C9.55871 10.6839 8.79565 11 8 11Z\",\n fill: \"#1D2129\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconSetting);\nexport default __webpack_public_path__ + \"static/media/icon-setting.0958183237df957651db6fb6a9cbb93d.svg\";\nexport { ForwardRef as ReactComponent };","import { RouteObject_ } from \"@/hook/app/useRoutesArr\";\nimport { CloseOutlined, DownOutlined } from \"@ant-design/icons\";\nimport { Button, Drawer, Dropdown, Menu, MenuProps, Space, Switch } from \"antd\";\nimport { useState } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport \"./index.less\";\nimport { t } from \"@lingui/macro\";\nimport { useNavigate } from \"@/hook/app/useNavigate\";\nimport { languageDict, useAppSetting } from \"@/hook/app/useAppSetting\";\nimport { ReactComponent as ImgSetting } from \"@img/icon-setting.svg\";\ntype MobileDrawProps = {\n linkList: RouteObject_[];\n onAddTokensClick: () => void;\n};\nconst MobileDraw: React.FC = ({\n linkList,\n onAddTokensClick,\n}) => {\n const [visible, setVisible] = useState(false);\n const location = useLocation();\n const navigatePush = useNavigate();\n const { settingData, changeTheme, changeLanguage } = useAppSetting();\n const showDrawer = () => {\n setVisible(true);\n };\n\n const onClose = () => {\n setVisible(false);\n };\n\n const clickLinkItem = (link: RouteObject_) => {\n navigatePush(link.path);\n setVisible(false);\n };\n\n const handleChangeTheme = () => {\n if (settingData?.theme === \"dark\") {\n changeTheme(\"light\");\n } else {\n changeTheme(\"dark\");\n }\n };\n const handleLanguageClick: MenuProps[\"onClick\"] = (e) => {\n changeLanguage(e.key);\n };\n\n const menu = (\n ({\n key,\n label: languageDict[key],\n }))}\n />\n );\n return (\n
\n
\n {visible ? (\n \n ) : (\n \n )}\n
\n\n \n
\n
\n

{t`Menu`}

\n
\n {linkList.map((link) => {\n let isActive = location.pathname.includes(link.path);\n if (link.label === \"Dashboard\" && location.pathname === \"/\") {\n isActive = true;\n }\n return (\n \n
clickLinkItem(link)}>\n {isActive && (\n \n )}\n {link.label}\n
\n
\n );\n })}\n
\n
\n
\n

{t`Global Setting`}

\n
\n
\n {t`Dark Mode`}\n \n
\n\n \n
\n {t`Select Language`}\n \n {languageDict[settingData.language]}\n \n \n
\n
\n
\n
\n
\n \n {t`Add Tokens`}\n \n
\n
\n \n \n );\n};\nexport default MobileDraw;\n","import { useWallet } from \"@/hook/useWallet\";\nimport { shortenAddress } from \"@/utils/address\";\nimport { DownOutlined } from \"@ant-design/icons\";\nimport { useResponsive } from \"ahooks\";\nimport { Dropdown, message } from \"antd\";\nimport \"./index.less\";\nimport { t } from \"@lingui/macro\";\nimport { ChainId, getNetworkConfig } from \"@/libs/config\";\nconst ConnectDropDown: React.FC = () => {\n const { account, chainId, disconnect, activeWalletType } = useWallet();\n const responsive = useResponsive();\n const { name } = getNetworkConfig(chainId as ChainId) || {};\n const copy = async () => {\n if (account) {\n await navigator.clipboard.writeText(account);\n message.success(t`Copy Success`);\n } else {\n message.error(t`No account`);\n }\n };\n\n const dropDownContent = () => {\n return (\n
\n
\n \"\"\n {shortenAddress(account || \"\")}\n
\n
\n {t`Network`}\n {name ? {name + \" \" + chainId} : {chainId}}\n
\n
\n
\n {t`Copy Address`}\n
\n {activeWalletType === \"Safe\" ? (\n
\n {t`Astar Safe Wallet`}\n
\n ) : (\n
\n {t`Disconnect Wallet`}\n
\n )}\n
\n
\n );\n };\n return account ? (\n trigger.parentElement || document.body}\n >\n
\n
\n {responsive.lg ? \"\" : null}\n {shortenAddress(account)}\n
\n
\n \n
\n
\n \n ) : null;\n};\nexport default ConnectDropDown;\n","import { languageDict, useAppSetting } from \"@/hook/app/useAppSetting\";\nimport { DownOutlined } from \"@ant-design/icons\";\nimport { Dropdown, Menu, MenuProps, Space, Switch } from \"antd\";\nimport { useState } from \"react\";\nimport \"./index.less\";\nimport { t } from \"@lingui/macro\";\nimport { ReactComponent as ImgSetting } from \"@img/icon-setting.svg\";\nconst ConnectDropDown: React.FC = () => {\n const { settingData, changeTheme, changeLanguage } = useAppSetting();\n\n const [visible, setVisible] = useState(false);\n\n const handleVisibleChange = (flag: boolean) => {\n setVisible(flag);\n };\n\n const handleChangeTheme = () => {\n setVisible(true);\n if (settingData?.theme === \"dark\") {\n changeTheme(\"light\");\n } else {\n changeTheme(\"dark\");\n }\n };\n const handleLanguageClick: MenuProps[\"onClick\"] = (e) => {\n setVisible(true);\n changeLanguage(e.key);\n };\n\n const dropDownContent = () => {\n const menu = (\n ({\n key,\n label: languageDict[key],\n }))}\n />\n );\n\n return (\n
\n

{t`Global Setting`}

\n
\n
\n {t`Dark Mode`}\n \n
\n\n \n
\n {t`Select Language`}\n \n {languageDict[settingData.language]}\n \n \n
\n
\n
\n
\n );\n };\n return (\n trigger.parentElement || document.body}\n >\n \n {/* */}\n \n );\n};\nexport default ConnectDropDown;\n","import { useLocation } from \"react-router-dom\";\nimport \"./index.less\";\n\nimport { Button, Tooltip } from \"antd\";\nimport { QuestionCircleOutlined } from \"@ant-design/icons\";\nimport { useResponsive } from \"ahooks\";\nimport MobileDraw from \"./MobileDraw\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport ConnectDropDown from \"./ConnectDropDown\";\nimport { useWallet } from \"@/hook/useWallet\";\nimport { addERC20TokenToMetamask } from \"@/libs/wallet-provider\";\nimport { useMarketData } from \"@/hook/useMarketData\";\nimport { getNetworkConfig } from \"@/libs/config\";\nimport { ASSETS_DICT } from \"@/constants/assets\";\nimport { ChainId } from \"@/libs/config/network\";\nimport { RouteObject_, useRoutesArr } from \"@/hook/app/useRoutesArr\";\nimport { SIO2_PRICE } from \"@/constants/config\";\nimport SettingDropDown from \"./SettingDropDown\";\nimport { t } from \"@lingui/macro\";\nimport { useNavigate } from \"@/hook/app/useNavigate\";\nimport { useAppSetting } from \"@/hook/app/useAppSetting\";\nimport { useModalContext } from \"@/hook/app/useModalContext\";\n\nexport type TopHeaderProps = {\n renderLeft?: () => React.ReactNode;\n title?: string;\n renderRight?: () => React.ReactNode;\n};\n\nconst TopHeader: React.FC = (props) => {\n const location = useLocation();\n const navigatePush = useNavigate();\n const responsive = useResponsive();\n const { routes } = useRoutesArr();\n const { account, connect, chainId } = useWallet();\n const [loading, setLoading] = useState(false);\n const [scrollBackground, setScrollBackground] = useState(false);\n const { settingData } = useAppSetting();\n const { data } = useMarketData();\n useEffect(() => {\n window.addEventListener(\"scroll\", onScroll);\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n\n const onScroll = () => {\n const scrollTop = document.documentElement.scrollTop;\n if (scrollTop > 10) {\n setScrollBackground(true);\n } else {\n setScrollBackground(false);\n }\n };\n\n const connectWallet = useCallback(async () => {\n try {\n setLoading(true);\n await connect(\"Metamask\").catch(() => {});\n setLoading(false);\n // openContent({\n // title: t`Connect Wallet`,\n // message: \"TESTS\",\n // type: \"connectWallet\",\n // });\n } catch (e) {\n console.log(\"error on activation\", e);\n // disconnectWallet();\n }\n }, []);\n\n const onAddTokensClick = async () => {\n data?.assets.forEach(async (item) => {\n await addERC20TokenToMetamask(item.displaySymbol || item.symbol, item.underlyingAsset, item.decimals);\n });\n data?.assets.forEach(async (item) => {\n await addERC20TokenToMetamask(`s${item.displaySymbol || item.symbol}`, item.sTokenAddress, item.decimals);\n });\n onAddSio2Click();\n\n //\n };\n const onAddSio2Click = async () => {\n if (chainId) {\n const { rewardToken } = getNetworkConfig(chainId as ChainId);\n await addERC20TokenToMetamask(ASSETS_DICT.SiO2.symbol, rewardToken.underlyingAsset);\n }\n };\n\n const clickLinkItem = (link: RouteObject_) => {\n navigatePush(link.path);\n };\n const linkList = routes.filter((item) => item.isTopHeader);\n\n return (\n
\n
\n
\n (window.location.href = \"https://www.sio2.finance/\")}\n >\n \n
\n {responsive.md ? (\n
\n {linkList.map((link) => {\n let isActive = location.pathname.includes(link.path);\n if (link.path === \"/dashboard\" && location.pathname === \"/\") {\n isActive = true;\n }\n return (\n
\n
clickLinkItem(link)}>\n {isActive && }\n {link.label}\n
\n
\n );\n })}\n
\n ) : null}\n
\n\n
\n {responsive.md ? (\n \n ) : null}\n \n\n {account ? (\n \n ) : (\n \n )}\n {responsive.md ? (\n \n ) : (\n \n )}\n
\n
\n \n );\n};\n\nexport default TopHeader;\n","import { Popover } from \"antd\";\nimport \"./index.less\";\nimport type { TableListProps, columnProps } from \"./index\";\nimport { CaretDownOutlined, CaretUpOutlined, InfoCircleOutlined } from \"@ant-design/icons\";\nimport { StateMessage } from \"@/component\";\nimport { useEffect, useState } from \"react\";\nimport NotificationBar from \"../NotificationBar\";\nimport { useUserData } from \"@/hook/useUserData\";\nimport { AssetMarketData } from \"@/types/models\";\nimport { useLocation } from \"react-router-dom\";\n\nconst getColumnWidth = (columns: columnProps[]): string => {\n let len = columns.length;\n const haveWidth = columns.reduce((preV, item) => {\n if (item.width) {\n len -= 1;\n return preV + parseInt(item.width);\n } else {\n return preV;\n }\n }, 0);\n const defaultArr = (100 - haveWidth) / len + \"%\";\n const widthArr = columns.map((item) => item.width || defaultArr);\n const widthStr = widthArr.join(\" \");\n return widthStr;\n};\nconst DesktopTable: React.FC = ({\n columns,\n dataSource,\n title,\n rowClick,\n stateMessage,\n disabledKey,\n}) => {\n /*\n * 数组,第一位表示排序的列的索引,第二列表示排序的规则\n * 0 无排序,1 大到小 , 2 小到大\n */\n\n const { pathname } = useLocation();\n const [sortType, setSortType] = useState([0, 0]);\n const [data, setData] = useState(dataSource);\n const { data: user } = useUserData();\n\n useEffect(() => {\n switch (sortType[1]) {\n case 0:\n setData(dataSource);\n break;\n case 1:\n sortTable(1);\n break;\n case 2:\n sortTable(2);\n break;\n default:\n setData(dataSource);\n break;\n }\n }, [dataSource, sortType]);\n\n const handleSort = (column: columnProps, index: number) => {\n if (!column.sort) {\n return;\n }\n\n let sortType_ = sortType[1] === 2 ? 0 : sortType[1] + 1;\n\n if (index !== sortType[0]) {\n sortType_ = 1;\n }\n\n setSortType([index, sortType_]);\n };\n const sortTable = (type: number) => {\n let column = columns[sortType[0]];\n const dealData = (item: any) => {\n let value = column.render ? column.render(\"\", item, 0) : item[column.dataIndex || \"\"];\n value = value?.replace(/%|\\$/g, \"\");\n if (isNaN(Number(value))) {\n value = item[column.dataIndex || \"\"]?.toString();\n }\n\n return value;\n };\n\n let data_ = [...dataSource].sort((a: any, b: any) => {\n let valueA = dealData(a);\n let valueB = dealData(b);\n console.log(valueA, valueB);\n return type === 1 ? valueB - valueA : valueA - valueB;\n });\n console.log(data_, \"data_\");\n setData(data_);\n };\n\n return (\n
\n
\n {columns.map((column, index) => {\n return (\n handleSort(column, index)}\n >\n
\n

{column.title}

\n {column.label ?

{column.label}

: null}\n
\n\n {column.tooltip ? (\n \n \n \n ) : null}\n {column.sort ? (\n
\n \n \n
\n ) : null}\n
\n );\n })}\n
\n {data.length ? (\n
\n {data.map((item, index) => {\n const depositData = user?.balanceByAsset[(item as AssetMarketData).symbol]?.[disabledKey || \"deposited\"];\n const isDisabled = item.symbol === \"BUSD\" && (depositData?.toString() === \"0\" || pathname === \"/market\");\n if (item.symbol === \"BUSD\") {\n return null;\n }\n return (\n <>\n rowClick?.(item)}\n >\n {columns.map((column) => {\n const text = item[column.dataIndex || \"\"];\n const renderTextDom = column.render?.(text, item, index);\n\n return (\n \n {renderTextDom ?? text}\n
\n );\n })}\n \n {/* {item.symbol === \"BUSD\" ? (\n
\n \n
\n ) : null} */}\n \n );\n })}\n \n ) : (\n \n )}\n \n );\n};\nexport default DesktopTable;\n","import { Descriptions } from \"antd\";\nimport \"./index.less\";\nimport type { TableListProps } from \"./index\";\nimport { StateMessage } from \"@/component\";\nconst MobileTable: React.FC = ({\n columns,\n dataSource,\n title,\n rowClick,\n stateMessage,\n}) => {\n const list = columns.filter((item) => item.noShow !== \"mobile\");\n\n return (\n
\n {dataSource.length ? (\n
\n {dataSource.map((item, index) => {\n return (\n rowClick?.(item)}\n >\n \n {list.map((column) => {\n const text = item[column.dataIndex || \"\"];\n return (\n \n {column.render?.(text, item, index) ?? text}\n \n );\n })}\n \n
\n );\n })}\n
\n ) : (\n \n )}\n \n );\n};\nexport default MobileTable;\n","import { useResponsive } from \"ahooks\";\nimport { useState } from \"react\";\nimport DesktopTable from \"./DesktopTable\";\nimport \"./index.less\";\nimport MobileTable from \"./MobileTable\";\nimport { t } from \"@lingui/macro\";\nimport { Pagination } from \"antd\";\n\nexport type columnProps = {\n title: string;\n label?: string;\n dataIndex?: string;\n width?: string;\n tooltip?: string;\n sort?: boolean;\n noShow?: string;\n\n render?: (text: string, record: Record, index: number) => React.ReactNode;\n};\n\nexport type TableListProps = {\n title: string;\n columns: columnProps[];\n dataSource: Record[];\n disabledKey?: \"deposited\" | \"borrowed\";\n rowClick?: (item: Record) => void;\n pagination?: {\n pageSize: number;\n page: number;\n totalCount: number;\n changePagination: (page: number, pageSize: number) => void;\n };\n stateMessage?: {\n text?: string;\n img?: string;\n render?: () => React.ReactNode;\n };\n};\n\n// The sort function can only be added to columns with the dataindex attribute\n\nconst TableList: React.FC = (props) => {\n const [isHide, setIsHide] = useState(false);\n const responsive = useResponsive();\n return (\n
\n
\n

{props.title}

\n
setIsHide(!isHide)}>\n {isHide ? t`Show` : t`Hide`}\n \n
\n
\n {isHide ? null : (\n
\n {responsive.sm ? : }\n {props.dataSource.length && props.pagination ? (\n \n ) : null}\n
\n )}\n
\n );\n};\nexport default TableList;\n","import { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { Popover } from \"antd\";\nimport \"./index.less\";\ntype StatisticProps = {\n imgSrc: string;\n titleDom?: React.ReactNode;\n label: string;\n tooltip?: string;\n};\nconst Statistic: React.FC = ({\n imgSrc,\n titleDom,\n label,\n tooltip,\n}) => {\n return (\n
\n \"\"\n
\n
\n {label}\n {tooltip ? (\n \n trigger.parentElement || document.body\n }\n >\n \n \n ) : null}\n
\n\n
{titleDom || \"-\"}
\n
\n
\n );\n};\nexport default Statistic;\n","import \"./index.less\";\nimport { t } from \"@lingui/macro\";\ntype StateMessageType = {\n text?: string;\n img?: string;\n render?: () => React.ReactNode;\n};\n\nconst StateMessage: React.FC = ({ img, text, render }) => {\n return (\n
\n {render ? (\n render()\n ) : (\n <>\n \"\"\n {text || t`No Data`}\n \n )}\n
\n );\n};\nexport default StateMessage;\n","import {\n SymbolArsw,\n SymbolAstr,\n SymbolBnb,\n SymbolBusd,\n SymbolDai,\n SymbolMatic,\n SymbolUsdc,\n SymbolUsdt,\n SymbolWbtc,\n SymbolWeth,\n SymbolWsdn,\n SymbolSio2,\n SymbolWastr,\n SymbolBai,\n SymbolWbnb,\n SymbolWdot,\n SymbolNastr,\n} from \"src/assets/img/symbols/symbols\";\nimport { Asset, AssetSymbol } from \"src/types/models\";\n\nexport const LISTED_ASSET_SYMBOLS = [\n \"ASTR\",\n \"DOT\",\n \"BAI\",\n \"USDC\",\n \"USDT\",\n \"BUSD\",\n \"DAI\",\n \"WETH\",\n \"WBTC\",\n \"SBY\",\n \"BNB\",\n\n \"MATIC\",\n\n \"SDN\",\n \"ARSW\",\n \"SiO2\",\n \"WASTR\",\n \"WDOT\",\n \"WBNB\",\n\n \"NSBY\",\n \"nASTR\"\n] as const;\n\nexport const SYMBOL_ORDER: Record =\n LISTED_ASSET_SYMBOLS.reduce(\n (res, symbol, idx) => ({\n ...res,\n [symbol]: idx,\n }),\n {}\n ) as Record;\n\nexport const ASSETS_DICT: { [key in AssetSymbol]: Asset } = {\n ASTR: {\n symbol: \"ASTR\",\n name: \"Astar\",\n icon: SymbolAstr,\n },\n WETH: {\n symbol: \"WETH\",\n name: \"Wrapped Ether\",\n icon: SymbolWeth,\n },\n WBTC: {\n symbol: \"WBTC\",\n name: \"Wrapped BTC\",\n icon: SymbolWbtc,\n },\n SDN: {\n symbol: \"SDN\",\n displaySymbol: \"WSDN\",\n name: \"Wrapped SDN\",\n icon: SymbolWsdn,\n },\n USDC: {\n symbol: \"USDC\",\n name: \"ceUSD Coin\",\n displaySymbol: \"ceUSDC\",\n icon: SymbolUsdc,\n },\n USDT: {\n symbol: \"USDT\",\n name: \"Tether ceUSD\",\n displaySymbol: \"ceUSDT\",\n icon: SymbolUsdt,\n },\n DAI: {\n symbol: \"DAI\",\n name: \"DAI\",\n icon: SymbolDai,\n },\n BUSD: {\n symbol: \"BUSD\",\n name: \"Binance USD\",\n icon: SymbolBusd,\n },\n BNB: {\n symbol: \"BNB\",\n name: \"Binance Coin\",\n icon: SymbolBnb,\n },\n MATIC: {\n symbol: \"MATIC\",\n name: \"Polygon Matic\",\n icon: SymbolMatic,\n },\n ARSW: {\n symbol: \"ARSW\",\n name: \"ArthSwap Token\",\n icon: SymbolArsw,\n borrowUnsupported: true,\n },\n SiO2: {\n symbol: \"SiO2\",\n name: \"SiO2 Token\",\n icon: SymbolSio2,\n borrowUnsupported: true,\n },\n SBY: {\n symbol: \"SBY\",\n name: \"Shibuya Token\",\n icon: SymbolAstr,\n },\n WASTR: {\n symbol: \"WASTR\",\n name: \"WASTR\",\n icon: SymbolWastr,\n },\n BAI: {\n symbol: \"BAI\",\n name: \"BAI\",\n icon: SymbolBai,\n },\n WBNB: {\n symbol: \"WBNB\",\n name: \"WBNB\",\n icon: SymbolWbnb,\n },\n DOT: {\n symbol: \"DOT\",\n name: \"Polkadot\",\n icon: SymbolWdot,\n },\n WDOT: {\n symbol: \"WDOT\",\n name: \"Polkadot\",\n icon: SymbolWdot,\n },\n NSBY: {\n symbol: \"NSBY\",\n name: \"NSBY\",\n icon: SymbolNastr,\n },\n nASTR: {\n symbol: \"nASTR\",\n name: \"nASTR\",\n icon: SymbolNastr,\n },\n} as const;\n\nexport const ASSETS: Asset[] = Object.values(ASSETS_DICT);\n\nexport const ARTHSWAP_ASSETS_DICT: {\n [key in string]: { symbol: string; icon: string };\n} = {\n ...ASSETS_DICT,\n WSDN: ASSETS_DICT.SDN,\n} as const;\n","import { CHAIN_ID } from \"@/libs/config/network\";\nimport { BigNumber } from \"ethers\";\n\nexport const GAS_ESTIMATOR_POLL_INTERVAL = 15000 as const;\n// export const GAS_PRICE_SPEED = \"average\" as const;\nexport const GAS_PRICE_SPEED = \"fastest\" as const;\nexport const DEFAULT_GAS_PRICE = {\n MIN: BigNumber.from(\"3000000000\"),\n // MAX: BigNumber.from(\"10000000000\"),\n MAX: BigNumber.from(\"900000000000\"),\n} as const;\n\nexport const SIO2_PRICE = 0.02;\nexport const DEV_CHAIN: number[] = [CHAIN_ID.shibuya, CHAIN_ID.dev];\n\nexport const PUBLIC_SALE_TOTAL_RASIED = 50000000;\nexport const PUBLIC_SALE_PRICE = 0.012;\n","import useSWRImmutable from \"swr/immutable\";\nimport { getSettingStorage, setSettingStorage } from \"@/utils/localStorage\";\nimport { loadSync } from \"@/libs/i18n-provider\";\nimport { Locale } from \"src/locales\";\n\nexport const languageDict: {\n [key: string]: string;\n} = {\n zh: \"中文(简体)\",\n en: \"English\",\n vi: \"Tiếng Việt\",\n ko: \"한국인\",\n tr: \"Türk\",\n id: \"bahasa Indonesia\",\n ja: \"日本語\",\n ru: \"Русский\",\n};\nexport type settingDataProps = {\n theme: string;\n language: string;\n};\n\nexport const defaultSetting = {\n theme: \"light\",\n language: \"en\",\n};\n\nexport const useAppSetting = () => {\n const { data: settingData, mutate: mutateAppSetting } = useSWRImmutable(\n \"app-setting\",\n () => {\n let data = getSettingStorage() || defaultSetting;\n document.body.className = data.theme;\n return data;\n }\n );\n const changeTheme = (theme: string) => {\n let newSettingData = {\n ...settingData,\n theme,\n };\n\n changeSetting(newSettingData);\n document.body.className = theme;\n };\n const changeLanguage = (language: string) => {\n let newSettingData = {\n ...settingData,\n language,\n };\n loadSync(language as Locale);\n changeSetting(newSettingData);\n };\n\n const changeSetting = (data: settingDataProps) => {\n setSettingStorage(data);\n mutateAppSetting();\n };\n\n return {\n settingData,\n changeTheme,\n changeLanguage,\n };\n};\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgIconArrowRight(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 16.97,\n height: 16.97,\n viewBox: \"0 0 16.97 16.97\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M-5969,12a1,1,0,0,1-1-1V1a1,1,0,0,1,1-1,1,1,0,0,1,1,1v9h9a1,1,0,0,1,1,1,1,1,0,0,1-1,1Z\",\n transform: \"translate(-4212.942 -4204.458) rotate(-135)\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgIconArrowRight);\nexport default __webpack_public_path__ + \"static/media/icon_arrow-right.928f581ff7c9355aac3b2cfbd83d863d.svg\";\nexport { ForwardRef as ReactComponent };","//common errors\nexport const error: { [key: string]: string } = {\n \"33\": \"The caller must be the pool admin\",\n \"59\": \"User borrows on behalf, but allowance are too small\",\n\n //contract specific errors\n \"1\": \"Amount must be greater than 0\",\n \"2\": \"Action requires an active reserve\",\n \"3\": \"Action cannot be performed because the reserve is frozen\",\n \"4\": \"The current liquidity is not enough\",\n \"5\": \"User cannot withdraw more than the available balance\",\n \"6\": \"Transfer cannot be allowed.\",\n \"7\": \"Borrowing is not enabled\",\n \"8\": \"Invalid interest rate mode selected\",\n \"9\": \"The collateral balance is 0\",\n \"10\": \"Health factor is lesser than the liquidation threshold\",\n \"11\": \"There is not enough collateral to cover a new borrow, It may be that the value obtained by the front-end max button is too large due to the fluctuation of interest and value at any time. Please try again, or adjust the value of max slightly.\",\n \"12\": \"stable borrowing not enabled\",\n \"13\": \"collateral is (mostly) the same currency that is being borrowed\",\n \"14\": \"The requested amount is greater than the max loan size in stable rate mode\",\n \"15\": \"for repayment of stable debt, the user needs to have stable debt, otherwise, he needs to have variable debt\",\n \"16\": \"To repay on behalf of an user an explicit amount to repay is needed\",\n \"17\": \"User does not have a stable rate loan in progress on this reserve\",\n \"18\": \"User does not have a variable rate loan in progress on this reserve\",\n \"19\": \"The underlying balance needs to be greater than 0\",\n \"20\": \"User supply is already being used as collateral\",\n \"21\": \"User does not have any stable rate loan for this reserve\",\n \"22\": \"Interest rate rebalance conditions were not met\",\n \"23\": \"Liquidation call failed\",\n \"24\": \"There is not enough liquidity available to borrow\",\n \"25\": \"The requested amount is too small for a FlashLoan.\",\n \"26\": \"The actual balance of the protocol is inconsistent\",\n \"27\": \"The caller of the function is not the lending pool configurator\",\n \"28\": \"\",\n \"29\": \"The caller of this function must be a lending pool\",\n \"30\": \"User cannot give allowance to himself\",\n \"31\": \"Transferred amount needs to be greater than zero\",\n \"32\": \"Reserve has already been initialized\",\n \"34\": \"The liquidity of the reserve needs to be 0\",\n \"35\": \"The liquidity of the reserve needs to be 0\",\n \"36\": \"The liquidity of the reserve needs to be 0\",\n \"37\": \"The liquidity of the reserve needs to be 0\",\n \"38\": \"The liquidity of the reserve needs to be 0\",\n \"39\": \"The liquidity of the reserve needs to be 0\",\n \"40\": \"The liquidity of the reserve needs to be 0\",\n \"75\": \"Invalid risk parameters for the reserve\",\n \"76\": \"The caller must be the emergency admin\",\n \"41\": \"Provider is not registered\",\n \"42\": \"Health factor is not below the threshold\",\n \"43\": \"The collateral chosen cannot be liquidated\",\n \"44\": \"User did not borrow the specified currency\",\n \"45\": \"There isn't enough liquidity available to liquidate\",\n \"46\": \"No errors\",\n \"47\": \"Invalid flashloan mode selected\",\n \"48\": \"\",\n \"49\": \"\",\n \"50\": \"\",\n \"51\": \"Liquidity index overflows uint128\",\n \"52\": \"Variable borrow index overflows uint128\",\n \"53\": \" Liquidity rate overflows uint128\",\n \"54\": \"Variable borrow rate overflows uint128\",\n \"55\": \"Stable borrow rate overflows uint128\",\n \"56\": \"invalid amount to mint\",\n \"57\": \"\",\n \"58\": \"invalid amount to burn\",\n \"60\": \"\",\n \"61\": \"\",\n \"62\": \"\",\n \"63\": \"\",\n \"64\": \"Pool is paused\",\n \"65\": \"\",\n \"66\": \"\",\n \"67\": \"\",\n \"68\": \"\",\n \"69\": \"\",\n \"70\": \"\",\n \"71\": \"\",\n \"72\": \"\",\n \"73\": \"\",\n \"74\": \"\",\n \"77\": \"\",\n \"78\": \"\",\n \"79\": \"\",\n \"80\": \"\",\n};\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport {\n ArrowUpOutlined,\n CheckOutlined,\n CloseOutlined,\n ExclamationOutlined,\n LoadingOutlined,\n} from \"@ant-design/icons\";\nimport { Button, Modal } from \"antd\";\nimport { useEffect } from \"react\";\nimport \"./index.less\";\nimport { error } from \"@/constants/error\";\n\nexport type MessageType =\n | \"loading\"\n | \"warning\"\n | \"submitted\"\n | \"error\"\n | \"success\"\n | \"cancel\";\nexport type MessageData = {\n type: MessageType;\n title: string;\n message?: string;\n onClose?: () => void;\n};\n\ntype ImageType = {\n [key in MessageType]: JSX.Element;\n};\n\nconst imageTypes: ImageType = {\n loading: (\n
\n \n
\n ),\n warning: (\n
\n \n
\n ),\n submitted: (\n
\n \n
\n ),\n\n error: (\n
\n \n
\n ),\n success: (\n
\n \n
\n ),\n cancel: (\n
\n \n
\n ),\n};\n\nconst MESSAGE_VISIBILITY_DURATION = 3000 as const; // 3 seconds\nconst MESSAGE_TYPES_WITH_DURATION: MessageType[] = [\"cancel\", \"success\"];\n\nconst MessageModal: React.FC = () => {\n const { messageData, setMessageVisible, messageVisible } = useModalContext();\n const { type } = messageData;\n\n useEffect(() => {\n if (MESSAGE_TYPES_WITH_DURATION.includes(messageData.type)) {\n setTimeout(() => {\n close();\n }, MESSAGE_VISIBILITY_DURATION);\n }\n }, [messageData]);\n\n const close = () => {\n messageData.onClose?.();\n setMessageVisible(false);\n };\n return (\n close()}\n >\n
\n

{messageData.title}

\n {imageTypes[type] || (\n
\n \n
\n )}\n\n {messageData.type === \"error\" ? (\n \n {error[messageData.message as string] || messageData.message}\n \n ) : (\n {messageData.message}\n )}\n {messageData.type === \"submitted\" ? (\n \n ) : null}\n
\n \n );\n};\n\nexport default MessageModal;\n","import { InterestRate } from \"submodule/packages/contract-helpers/dist/cjs\";\nimport { BigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport { ethers } from \"ethers\";\nimport { ChainId, getMarketConfig, getNetworkConfig } from \"src/libs/config\";\nimport { lendingPoolContract } from \"src/libs/lending-pool\";\nimport { leveragerContract } from \"src/libs/leverager\";\nimport { BASE_ASSET_DUMMY_ADDRESS } from \"src/libs/pool-data-provider/converters/constants\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { equals } from \"src/utils/address\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { useStaticRPCProvider } from \"../useStaticRPCProvider\";\nimport { useTxHandler } from \"./txHandler\";\n\nexport const useLendingPool = (\n account: EthereumAddress | null | undefined,\n signer: ethers.providers.JsonRpcSigner | undefined\n) => {\n const { data: provider } = useStaticRPCProvider();\n const { data: lendingPool } = useSWRImmutable(\n provider && [\"lendingpool\", provider.chainId],\n () => lendingPoolContract(provider!)\n );\n const { data: leverager } = useSWRImmutable(\n provider && [\"leverager\", provider.chainId],\n () => {\n const { LEVERAGER } = getMarketConfig(provider!.chainId).addresses;\n if (!LEVERAGER) return undefined;\n return leveragerContract(provider!, LEVERAGER);\n }\n );\n const { handleTx } = useTxHandler();\n\n const deposit = async (param: {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n }) => {\n if (!lendingPool || !account || !signer)\n throw new Error(\"Unexpected state\");\n\n return handleTx(\n await lendingPool.deposit({\n user: account,\n reserve: param.underlyingAsset,\n amount: param.amount.toString(),\n }),\n signer\n );\n };\n\n const withdraw = async (param: {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n sTokenAddress: EthereumAddress;\n all?: boolean;\n }) => {\n if (!lendingPool || !account || !signer)\n throw new Error(\"Unexpected state\");\n return handleTx(\n await lendingPool.withdraw({\n user: account,\n reserve: param.underlyingAsset,\n amount: param.all ? \"-1\" : param.amount.toString(),\n sTokenAddress: param.sTokenAddress,\n }),\n signer\n );\n };\n\n const borrow = async (param: {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n vdTokenAddress: EthereumAddress;\n onSucceeded?: VoidFunction;\n }) => {\n if (!lendingPool || !account || !signer)\n throw new Error(\"Unexpected state\");\n return handleTx(\n await lendingPool.borrow({\n user: account,\n reserve: param.underlyingAsset,\n amount: param.amount.toString(),\n interestRateMode: InterestRate.Variable,\n debtTokenAddress: param.vdTokenAddress,\n }),\n signer,\n param.onSucceeded\n );\n };\n const repay = async (param: {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n all?: boolean;\n }) => {\n if (!lendingPool || !account || !signer)\n throw new Error(\"Unexpected state\");\n const repayAmount = !param.all\n ? param.amount.toString()\n : equals(param.underlyingAsset, BASE_ASSET_DUMMY_ADDRESS)\n ? param.amount.times(1.01).toString()\n : \"-1\";\n return handleTx(\n await lendingPool.repay({\n user: account,\n reserve: param.underlyingAsset,\n amount: repayAmount,\n interestRateMode: InterestRate.Variable,\n }),\n signer\n );\n };\n const setUsageAsCollateral = async (\n usageAsCollateral: boolean,\n underlyingAsset: EthereumAddress\n ) => {\n if (!lendingPool || !account || !signer || !provider)\n throw new Error(\"Unexpected state\");\n return handleTx(\n lendingPool.setUsageAsCollateral({\n user: account,\n reserve: reserveAddress(underlyingAsset, provider.chainId),\n usageAsCollateral,\n }),\n signer\n );\n };\n\n const loop = async (param: {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n debtToken: EthereumAddress;\n borrowRatio: BigNumber;\n loopCount: number;\n }) => {\n if (!leverager || !account || !signer) throw new Error(\"Unexpected state\");\n return handleTx(\n await leverager.loop({\n user: account,\n reserve: param.underlyingAsset,\n amount: param.amount.toString(),\n debtToken: param.debtToken,\n interestRateMode: InterestRate.Variable,\n borrowRatio: param.borrowRatio.toFixed(4, BigNumber.ROUND_FLOOR),\n loopCount: param.loopCount.toFixed(0),\n }),\n signer\n );\n };\n\n return { deposit, withdraw, borrow, repay, setUsageAsCollateral, loop };\n};\n\nconst reserveAddress = (underlyingAsset: string, chainId: ChainId) => {\n if (!equals(underlyingAsset, BASE_ASSET_DUMMY_ADDRESS))\n return underlyingAsset;\n const {\n baseAsset: { wrapperAddress },\n } = getNetworkConfig(chainId);\n return wrapperAddress;\n};\n","import { LendingPool } from '../../../submodule/packages/contract-helpers/dist/cjs'\nimport { getMarketConfig } from '../config'\nimport { StaticRPCProvider } from '../pool-data-provider'\n\nexport const lendingPoolContract = ({ chainId, provider }: StaticRPCProvider) =>\n new LendingPool(provider, getMarketConfig(chainId).addresses);\n","import { Leverager } from '../../../submodule/packages/contract-helpers/dist/cjs'\nimport { EthereumAddress } from 'src/types/web3'\nimport { StaticRPCProvider } from '../pool-data-provider'\n\nexport const leveragerContract = (\n { provider }: StaticRPCProvider,\n leveragerAddress: EthereumAddress\n) => new Leverager(provider, leveragerAddress);\n","import {\n BigNumber,\n calculateHealthFactorFromBalances,\n LTV_PRECISION,\n normalize,\n normalizeBN,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport {\n AssetMarketData,\n UserAssetBalance,\n UserSummary,\n} from \"src/types/models\";\nimport { calculateLoopingAPR, convertFromUSD } from \"./calculator\";\nimport { BN_ONE, BN_ZERO } from \"./number\";\nimport { t } from \"@lingui/macro\";\n\nexport const HEALTH_FACTOR_THRESHOLD = 1;\n\ntype EstimationResult = {\n availableBorrowsInUSD?: BigNumber;\n totalBorrowedInUSD?: BigNumber;\n borrowLimitUsed?: BigNumber;\n healthFactor?: BigNumber;\n maxAmount: BigNumber;\n unavailableReason?: string;\n};\n\nexport type EstimationParam = {\n amount: BigNumber | undefined;\n asset: AssetMarketData;\n userSummary: UserSummary;\n userAssetBalance: UserAssetBalance;\n marketReferenceCurrencyPriceInUSD: BigNumber;\n marketReferenceCurrencyDecimals: number;\n};\n\nexport const estimateDeposit = ({\n amount,\n userAssetBalance,\n userSummary,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n asset: {\n baseLTVasCollateral,\n priceInMarketReferenceCurrency,\n reserveLiquidationThreshold,\n },\n}: EstimationParam): EstimationResult => {\n const maxAmount = userAssetBalance.inWallet;\n if (!validEstimationInput(amount))\n return { unavailableReason: t`Enter amount`, maxAmount };\n\n const {\n availableBorrowsInUSD: currentBorrowable,\n totalBorrowedInUSD: currentBorrowed,\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n\n const amountInMarketReferenceCurrency = amount.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const ltvInUSD = amountInMarketReferenceCurrency\n .multipliedBy(marketReferenceCurrencyPriceInUSD)\n .multipliedBy(baseLTVasCollateral);\n\n const availableBorrowsInUSD = currentBorrowable.plus(ltvInUSD);\n const borrowLimitInUSD = availableBorrowsInUSD.plus(currentBorrowed);\n const borrowLimitUsed = calcBorrowLimitUsed(\n borrowLimitInUSD,\n currentBorrowed\n );\n\n const liquidationThreshold = calcLiquidationThreshold(\n {\n threshold: currentLiquidationThreshold,\n collateral: currentCollateralInMarketReferenceCurrency,\n },\n {\n threshold: reserveLiquidationThreshold,\n collateral: amountInMarketReferenceCurrency,\n }\n );\n const healthFactor = calculateHealthFactor({\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency.plus(\n amountInMarketReferenceCurrency\n ),\n liquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n\n return {\n unavailableReason: amount.gt(maxAmount)\n ? t`No balance to deposit`\n : undefined,\n maxAmount,\n availableBorrowsInUSD,\n borrowLimitUsed,\n healthFactor,\n };\n};\n\nexport const estimateWithdrawal = (\n params: EstimationParam\n): EstimationResult => {\n const {\n amount,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n } = params;\n const {\n baseLTVasCollateral,\n liquidity,\n priceInMarketReferenceCurrency,\n reserveLiquidationThreshold,\n } = asset;\n const unusedCollateral = unusedCollateralOnWithdraw(params);\n const maxAmount = BigNumber.min(\n userAssetBalance.deposited,\n liquidity,\n unusedCollateral\n );\n\n if (!validEstimationInput(amount))\n return { unavailableReason: t`Enter amount`, maxAmount };\n\n const {\n totalBorrowedInUSD: currentBorrowed,\n borrowLimitInUSD: currentLimit,\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n\n if (\n !amount.gt(maxAmount) &&\n (!userAssetBalance.usageAsCollateralEnabled || currentBorrowed.isZero())\n )\n return {\n maxAmount,\n availableBorrowsInUSD: userSummary.availableBorrowsInUSD,\n borrowLimitUsed: userSummary.borrowLimitUsed,\n healthFactor: userSummary.healthFactor,\n };\n\n const amountInMarketReferenceCurrency = amount.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const ltvInUSD = amountInMarketReferenceCurrency\n .multipliedBy(marketReferenceCurrencyPriceInUSD)\n .multipliedBy(baseLTVasCollateral);\n\n const borrowLimitInUSD = currentLimit.minus(ltvInUSD);\n const availableBorrowsInUSD = BigNumber.max(\n borrowLimitInUSD.minus(currentBorrowed),\n BN_ZERO\n );\n const borrowLimitUsed = calcBorrowLimitUsed(\n borrowLimitInUSD,\n currentBorrowed\n );\n\n const liquidationThreshold = calcLiquidationThreshold(\n {\n threshold: currentLiquidationThreshold,\n collateral: currentCollateralInMarketReferenceCurrency,\n },\n {\n threshold: reserveLiquidationThreshold,\n collateral: amountInMarketReferenceCurrency.negated(),\n }\n );\n const healthFactor = calculateHealthFactor({\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency.minus(\n amountInMarketReferenceCurrency\n ),\n liquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n\n const unavailableReason = withdrawUnavailableReason(\n amount,\n userAssetBalance.deposited,\n unusedCollateral,\n asset.liquidity,\n healthFactor\n );\n return {\n unavailableReason,\n maxAmount,\n availableBorrowsInUSD,\n borrowLimitUsed,\n healthFactor,\n };\n};\n\nconst withdrawUnavailableReason = (\n amount: BigNumber,\n deposited: BigNumber,\n unusedCollateral: BigNumber,\n liquidity: BigNumber,\n healthFactor: BigNumber\n) => {\n if (amount.gt(deposited)) return t`No balance to withdraw`;\n if (amount.gt(unusedCollateral)) return t`Insufficient collateral`;\n if (amount.gt(liquidity)) return t`No liquidity to withdraw`;\n if (healthFactor.gte(HEALTH_FACTOR_THRESHOLD)) return undefined;\n return t`Health factor too low`;\n};\n\nexport const estimateBorrow = ({\n amount,\n userSummary,\n asset: { priceInMarketReferenceCurrency, liquidity },\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n}: EstimationParam): EstimationResult => {\n const {\n availableBorrowsInUSD: currentBorrowableInUSD,\n totalBorrowedInUSD: currentBorrowedInUSD,\n borrowLimitInUSD,\n totalCollateralInMarketReferenceCurrency,\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n const currentBorrowable = convertFromUSD(\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyPriceInUSD,\n currentBorrowableInUSD\n );\n\n const maxAmount = BigNumber.min(currentBorrowable, liquidity);\n if (!validEstimationInput(amount))\n return { unavailableReason: t`Enter amount`, maxAmount };\n\n const amountInMarketReferenceCurrency = amount.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const totalBorrowedInUSD = currentBorrowedInUSD.plus(\n amountInMarketReferenceCurrency.multipliedBy(\n marketReferenceCurrencyPriceInUSD\n )\n );\n\n const borrowLimitUsed = calcBorrowLimitUsed(\n borrowLimitInUSD,\n totalBorrowedInUSD\n );\n\n const healthFactor = calculateHealthFactor({\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency.plus(\n amountInMarketReferenceCurrency\n ),\n totalCollateralInMarketReferenceCurrency,\n liquidationThreshold: currentLiquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n const unavailableReason = borrowUnavailableReason(\n amount,\n currentBorrowable,\n liquidity,\n healthFactor\n );\n return {\n unavailableReason,\n maxAmount,\n totalBorrowedInUSD,\n borrowLimitUsed,\n healthFactor,\n };\n};\nexport const borrowUnavailableReason = (\n amount: BigNumber,\n currentBorrowable: BigNumber,\n liquidity: BigNumber,\n healthFactor: BigNumber\n) => {\n if (amount.gt(currentBorrowable)) return t`Borrowing limit reached`;\n if (amount.gt(liquidity)) return t`No liquidity to borrow`;\n if (healthFactor.isPositive() && healthFactor.lt(HEALTH_FACTOR_THRESHOLD))\n return t`Health factor too low`;\n return undefined;\n};\n\nexport const estimateRepayment = ({\n amount,\n userAssetBalance,\n userSummary,\n asset: { priceInMarketReferenceCurrency },\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n}: EstimationParam): EstimationResult => {\n const { borrowed: currentBorrowed, inWallet } = userAssetBalance;\n const maxAmount = BigNumber.min(currentBorrowed, inWallet);\n if (!validEstimationInput(amount))\n return { unavailableReason: t`Enter amount`, maxAmount };\n\n const {\n totalBorrowedInUSD: currentBorrowedInUSD,\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency,\n borrowLimitInUSD,\n totalCollateralInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n const amountInMarketReferenceCurrency = amount.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const totalBorrowedInUSD = currentBorrowedInUSD.minus(\n amountInMarketReferenceCurrency.multipliedBy(\n marketReferenceCurrencyPriceInUSD\n )\n );\n\n const borrowLimitUsed = calcBorrowLimitUsed(\n borrowLimitInUSD,\n totalBorrowedInUSD,\n BN_ONE\n );\n\n const healthFactor = calculateHealthFactor({\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency.minus(\n amountInMarketReferenceCurrency\n ),\n totalCollateralInMarketReferenceCurrency,\n liquidationThreshold: currentLiquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n\n return {\n unavailableReason: amount.gt(inWallet)\n ? t`Not enough wallet balance to repay`\n : normalize(currentBorrowed, 1) === \"0\"\n ? t`No borrowed balance to repay`\n : undefined,\n maxAmount,\n totalBorrowedInUSD,\n borrowLimitUsed,\n healthFactor,\n };\n};\n\ntype LoopingEstimationResult = {\n maxAmount: BigNumber;\n depositAPY: BigNumber;\n borrowAPY: BigNumber;\n rewardAPR: BigNumber;\n netAPY: BigNumber;\n unavailableReason?: string;\n healthFactor?: BigNumber;\n};\nconst EMPTY_ESTIMATION = {\n depositAPY: BN_ZERO,\n borrowAPY: BN_ZERO,\n rewardAPR: BN_ZERO,\n netAPY: BN_ZERO,\n};\nexport const estimateLooping = ({\n amount,\n userAssetBalance,\n userSummary,\n asset: {\n priceInMarketReferenceCurrency,\n depositAPY,\n variableBorrowAPY,\n depositIncentiveAPR,\n variableBorrowIncentiveAPR,\n reserveLiquidationThreshold,\n },\n leverage,\n marketReferenceCurrencyDecimals,\n}: EstimationParam & { leverage: BigNumber }): LoopingEstimationResult => {\n const { inWallet } = userAssetBalance;\n const maxAmount = inWallet;\n if (!validEstimationInput(amount))\n return {\n unavailableReason: t`Enter amount`,\n maxAmount,\n ...EMPTY_ESTIMATION,\n };\n if (!leverage || leverage.isNaN() || leverage.eq(BN_ONE))\n return {\n unavailableReason: t`Enter leverage`,\n maxAmount,\n ...EMPTY_ESTIMATION,\n };\n const {\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency,\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n const totalDeposit = amount.multipliedBy(leverage);\n const totalBorrow = totalDeposit.minus(amount);\n const loopedRewardAPR = calculateLoopingAPR({\n leverage,\n depositIncentiveAPR,\n variableBorrowIncentiveAPR,\n });\n const loopedDepositAPY = totalDeposit.multipliedBy(depositAPY).div(amount);\n const loopedBorrowAPY = totalBorrow\n .multipliedBy(variableBorrowAPY)\n .div(amount);\n\n const totalDepositInMarketReferenceCurrency = totalDeposit.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const totalBorrowInMarketReferenceCurrency = totalBorrow.multipliedBy(\n priceInMarketReferenceCurrency\n );\n const liquidationThreshold = calcLiquidationThreshold(\n {\n threshold: currentLiquidationThreshold,\n collateral: currentCollateralInMarketReferenceCurrency,\n },\n {\n threshold: reserveLiquidationThreshold,\n collateral: totalDepositInMarketReferenceCurrency,\n }\n );\n const healthFactor = calculateHealthFactor({\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency.plus(\n totalDepositInMarketReferenceCurrency\n ),\n totalBorrowedInMarketReferenceCurrency:\n currentBorrowedInMarketReferenceCurrency.plus(\n totalBorrowInMarketReferenceCurrency\n ),\n liquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n return {\n unavailableReason: amount.gt(maxAmount)\n ? t`No balance to loop`\n : !healthFactor.gte(HEALTH_FACTOR_THRESHOLD)\n ? t`Health factor too low`\n : undefined,\n maxAmount,\n depositAPY: loopedDepositAPY,\n borrowAPY: loopedBorrowAPY,\n rewardAPR: loopedRewardAPR,\n netAPY: loopedDepositAPY.plus(loopedRewardAPR).minus(loopedBorrowAPY),\n healthFactor,\n };\n};\n\nexport const estimateUsageAsCollateral = ({\n userAssetBalance,\n userSummary,\n marketReferenceCurrencyPriceInUSD,\n asset: {\n baseLTVasCollateral,\n priceInMarketReferenceCurrency,\n reserveLiquidationThreshold,\n },\n usageAsCollateralEnabled,\n marketReferenceCurrencyDecimals,\n}: Omit & {\n usageAsCollateralEnabled: boolean;\n}): Omit => {\n const {\n availableBorrowsInUSD: currentBorrowable,\n totalBorrowedInUSD: currentBorrowed,\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency,\n currentLiquidationThreshold,\n } = userSummary;\n const { deposited } = userAssetBalance;\n\n const amountInMarketReferenceCurrency = deposited\n .multipliedBy(priceInMarketReferenceCurrency)\n .multipliedBy(usageAsCollateralEnabled ? BN_ONE : BN_ONE.negated());\n const ltvInUSD = amountInMarketReferenceCurrency\n .multipliedBy(marketReferenceCurrencyPriceInUSD)\n .multipliedBy(baseLTVasCollateral);\n\n const availableBorrowsInUSD = currentBorrowable.plus(ltvInUSD);\n const borrowLimitInUSD = availableBorrowsInUSD.plus(currentBorrowed);\n const borrowLimitUsed = calcBorrowLimitUsed(\n borrowLimitInUSD,\n currentBorrowed\n );\n\n const liquidationThreshold = calcLiquidationThreshold(\n {\n threshold: currentLiquidationThreshold,\n collateral: currentCollateralInMarketReferenceCurrency,\n },\n {\n threshold: reserveLiquidationThreshold,\n collateral: amountInMarketReferenceCurrency,\n }\n );\n const healthFactor = calculateHealthFactor({\n totalBorrowedInMarketReferenceCurrency,\n totalCollateralInMarketReferenceCurrency:\n currentCollateralInMarketReferenceCurrency.plus(\n amountInMarketReferenceCurrency\n ),\n liquidationThreshold,\n marketReferenceCurrencyDecimals,\n });\n return {\n unavailableReason: borrowLimitUsed?.gt(BN_ONE)\n ? t`Borrowing limit reached`\n : currentBorrowed.gt(BN_ZERO) &&\n !healthFactor.gte(HEALTH_FACTOR_THRESHOLD)\n ? t`Health factor too low`\n : undefined,\n availableBorrowsInUSD: BigNumber.max(availableBorrowsInUSD, BN_ZERO),\n borrowLimitUsed,\n healthFactor,\n };\n};\n\nconst unusedCollateralOnWithdraw = ({\n asset,\n userSummary,\n userAssetBalance,\n}: EstimationParam) => {\n if (\n !userAssetBalance.usageAsCollateralEnabled ||\n !asset.usageAsCollateralEnabled ||\n userSummary.totalBorrowedInMarketReferenceCurrency.isZero()\n )\n return valueToBigNumber(Infinity);\n const excessHF = userSummary.healthFactor.minus(\"1\");\n if (!excessHF.isPositive()) return BN_ZERO;\n return (\n excessHF\n .multipliedBy(userSummary.totalBorrowedInMarketReferenceCurrency)\n // because of the rounding issue on the contracts side this value still can be incorrect\n .div(asset.reserveLiquidationThreshold.plus(\"0.01\"))\n .multipliedBy(\"0.99\")\n .dividedBy(asset.priceInMarketReferenceCurrency)\n );\n};\n\nconst calcBorrowLimitUsed = (\n borrowLimitInUSD: BigNumber,\n totalBorrowed: BigNumber,\n defaultValue?: BigNumber\n) =>\n borrowLimitInUSD.gt(0)\n ? totalBorrowed.dividedBy(borrowLimitInUSD)\n : defaultValue;\n\nconst calcLiquidationThreshold = (\n current: { threshold: BigNumber; collateral: BigNumber },\n delta: { threshold: BigNumber; collateral: BigNumber }\n) =>\n current.collateral\n .multipliedBy(current.threshold)\n .plus(delta.collateral.multipliedBy(delta.threshold))\n .div(current.collateral.plus(delta.collateral));\n\nconst calculateHealthFactor = (param: {\n totalCollateralInMarketReferenceCurrency: BigNumber;\n totalBorrowedInMarketReferenceCurrency: BigNumber;\n liquidationThreshold: BigNumber;\n marketReferenceCurrencyDecimals: number;\n}) => {\n const result = calculateHealthFactorFromBalances({\n collateralBalanceMarketReferenceCurrency: normalizeBN(\n param.totalCollateralInMarketReferenceCurrency,\n -param.marketReferenceCurrencyDecimals\n ),\n borrowBalanceMarketReferenceCurrency: normalizeBN(\n param.totalBorrowedInMarketReferenceCurrency,\n -param.marketReferenceCurrencyDecimals\n ),\n currentLiquidationThreshold: normalizeBN(\n param.liquidationThreshold,\n -LTV_PRECISION\n ),\n });\n if (param.totalBorrowedInMarketReferenceCurrency.isZero()) return result;\n return result.isPositive() ? result : BN_ZERO;\n};\n\nconst validEstimationInput = (\n amount: BigNumber | undefined\n): amount is BigNumber => !!(amount && !amount.isNaN() && amount.gt(BN_ZERO));\n","import { BigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport \"../index.less\";\nimport { ReactComponent as ImgArrowRight } from \"@img/icon_arrow-right.svg\";\ntype ListItemProps = {\n img?: {\n src: string;\n alt: string;\n };\n label: string;\n value: string;\n after?: BigNumber | string;\n formatAfter?: (num: BigNumber) => string;\n};\nconst ListItem: React.FC = ({ img, label, value, after, formatAfter }) => {\n return (\n
\n
\n {img ? {img.alt} : null}\n {label}\n
\n
\n {value}\n {after ? (\n
\n
\n \n \n \n
\n {typeof after === \"string\" ? after : formatAfter?.(after)}\n
\n ) : null}\n
\n
\n );\n};\nexport default ListItem;\n","import { BigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport { AssetSymbol } from \"src/types/models\";\nimport { convertToUSD } from \"./calculator\";\n\ndeclare const window: Window[\"window\"] & {\n dataLayer?: Record[];\n};\n\nexport type TrackedData = {\n eventType: EventType;\n assetSymbol: AssetSymbol;\n valueInUSD: BigNumber;\n};\n\nexport type EventType =\n | \"deposit\"\n | \"withdraw\"\n | \"borrow\"\n | \"repay\"\n | \"loop\"\n | \"stake\"\n | \"claim\"\n | \"redeem\";\n\nexport const createTrackedData = (\n eventType: TrackedData[\"eventType\"],\n assetSymbol: AssetSymbol,\n amount: BigNumber,\n priceInMarketReferenceCurrency: BigNumber,\n marketReferenceCurrencyPriceInUSD: BigNumber\n): TrackedData | undefined => {\n if (!assetSymbol || !priceInMarketReferenceCurrency) return;\n return {\n eventType: eventType,\n assetSymbol: assetSymbol,\n valueInUSD: convertToUSD(\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyPriceInUSD,\n amount\n ),\n };\n};\n\nexport const sendEventData = (trackedData: TrackedData): void => {\n if (!window.dataLayer) return;\n window.dataLayer.push({\n event: trackedData.eventType,\n underlying_asset: trackedData.assetSymbol,\n value_in_usd: trackedData.valueInUSD.dp(0, BigNumber.ROUND_DOWN).toNumber(),\n });\n};\n","import { BigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport { AssetMarketData } from \"src/types/models\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { equals } from \"src/utils/address\";\nimport { createTrackedData, EventType, sendEventData } from \"src/utils/gtm\";\nimport { BN_ONE } from \"src/utils/number\";\nimport { useMarketData } from \"./useMarketData\";\n\ntype TrackingParams = {\n amount: BigNumber;\n underlyingAsset: EthereumAddress;\n};\n\nexport const useTracking = () => {\n const { data: marketData } = useMarketData();\n\n const assetFromUnderlyingAsset = (\n underlyingAsset: EthereumAddress\n ): AssetMarketData | undefined =>\n marketData?.assets.find((asset) =>\n equals(asset.underlyingAsset, underlyingAsset)\n );\n\n const withTracking =\n (\n event: EventType,\n fn: (param: T) => Promise<{ error: number } | undefined>\n ) =>\n async (param: T) => {\n const res = await fn(param);\n if (res?.error) return;\n\n const asset = assetFromUnderlyingAsset(param.underlyingAsset);\n if (!asset) return;\n\n const trackedData = createTrackedData(\n event,\n asset.symbol,\n param.amount,\n asset.priceInMarketReferenceCurrency,\n marketData?.marketReferenceCurrencyPriceInUSD || BN_ONE\n );\n\n if (trackedData) sendEventData(trackedData);\n };\n return { withTracking };\n};\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { useMarketData } from \"@/hook/useMarketData\";\nimport { useWalletBalance } from \"@/hook/useWalletBalance\";\nimport { Button, Input, Segmented } from \"antd\";\nimport { useLendingPool } from \"@/hook/contracts/useLendingPool\";\nimport { ASSETS_DICT } from \"src/constants/assets\";\nimport { BN_ZERO, formatAmt, formatAmtShort, formatPct, formattedToBigNumber, formatUSD } from \"src/utils/number\";\nimport { useEffect, useState } from \"react\";\nimport \"../index.less\";\nimport { AssetMarketData } from \"@/types/models\";\nimport { estimateBorrow, estimateRepayment } from \"@/utils/estimationHelper\";\nimport ListItem from \"./ListItem\";\nimport { useTracking } from \"@/hook/useTracking\";\nimport { BigNumber, valueToBigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport { useWallet } from \"@/hook/useWallet\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { useUserData } from \"@/hook/useUserData\";\nimport { t } from \"@lingui/macro\";\n\nconst BorrowModal: React.FC = () => {\n const { args, closeModal, messageVisible, contentVisible } = useModalContext();\n\n const { data: marketData } = useMarketData();\n const { data: balance } = useWalletBalance();\n const { data: user } = useUserData();\n const [activeTab, setActiveTab] = useState(args.type);\n\n const [borrowingAmount, setBorrowingAmount] = useState(\"\");\n const [repaymentAmount, setRepaymentAmount] = useState(\"\");\n\n const { account, signer } = useWallet();\n const { borrow, repay } = useLendingPool(account, signer);\n\n const { withTracking } = useTracking();\n\n useEffect(() => {\n if (!messageVisible) {\n reset();\n }\n }, [messageVisible]);\n useEffect(() => {\n if (!contentVisible) {\n reset();\n }\n }, [contentVisible]);\n useEffect(() => {\n reset();\n }, [args]);\n\n const reset = () => {\n setActiveTab(args.type);\n setBorrowingAmount(\"\");\n setRepaymentAmount(\"\");\n };\n\n if (!args.asset || !user) {\n return null;\n }\n\n const { marketReferenceCurrencyPriceInUSD = BN_ZERO, marketReferenceCurrencyDecimals = 0 } = marketData || {};\n\n const { asset }: { asset: AssetMarketData } = args;\n\n const userSummary = user.summary;\n const userAssetBalance = {\n ...user?.balanceByAsset[asset?.symbol],\n inWallet: balance[asset.symbol],\n };\n const {\n symbol,\n displaySymbol,\n variableBorrowAPY,\n variableBorrowIncentiveAPR,\n liquidity,\n borrowingEnabled,\n isFrozen,\n icon,\n name,\n } = asset;\n const { totalBorrowedInUSD, borrowLimitUsed, healthFactor } = userSummary;\n const { borrowed } = userAssetBalance;\n const borrowable = borrowingEnabled && !isFrozen && symbol !== \"BUSD\";\n\n const borrowingAmountBn = formattedToBigNumber(borrowingAmount);\n const repaymentAmountBn = formattedToBigNumber(repaymentAmount);\n\n const estimation =\n activeTab === \"borrow\"\n ? estimateBorrow({\n amount: borrowingAmountBn,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n })\n : estimateRepayment({\n amount: repaymentAmountBn,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n });\n const borrowWithTracking = withTracking(\"borrow\", borrow);\n const repayWithTracking = withTracking(\"repay\", repay);\n const borrowHandle = (amount: BigNumber) =>\n borrowWithTracking({\n amount,\n underlyingAsset: asset.underlyingAsset,\n vdTokenAddress: asset.vdTokenAddress,\n });\n const repayHandle = (amount: BigNumber, all: boolean) =>\n repayWithTracking({\n amount,\n underlyingAsset: asset.underlyingAsset,\n all,\n });\n return (\n
\n
\n \n
\n
\n \"\"\n

{asset.displaySymbol || asset.name}

\n
\n {\n setActiveTab(value as string);\n }}\n />\n
\n {/* \n \n Amount \n \n */}\n {t`Amount`}\n {activeTab === \"borrow\" ? (\n setBorrowingAmount(e.target.value)}\n suffix={\n \n setBorrowingAmount(\n formatAmt(estimation.maxAmount, {\n decimalPlaces: 10,\n roundingMode: BigNumber.ROUND_FLOOR,\n })\n )\n }\n >\n {t`Max`}\n
\n }\n >\n ) : (\n setRepaymentAmount(e.target.value)}\n suffix={
setRepaymentAmount(formatAmt(estimation.maxAmount))}>{t`Max`}
}\n >\n )}\n
\n\n
\n {t`Transaction overview`}\n
\n \n \n \n \n \n
\n
\n {activeTab === \"borrow\" ? (\n
\n {\n closeModal();\n\n return borrowHandle(valueToBigNumber(borrowingAmountBn!));\n }}\n disabled={!!estimation.unavailableReason}\n >\n {estimation.unavailableReason || t`Borrow`}\n \n
\n {t`Liquidity`}\n \n {formatAmt(liquidity, {\n symbol: displaySymbol || symbol,\n shorteningThreshold: 20,\n })}\n \n
\n
\n ) : (\n
\n {\n closeModal();\n\n return repayHandle(valueToBigNumber(repaymentAmountBn!), false);\n }}\n disabled={!!estimation.unavailableReason}\n >\n {estimation.unavailableReason || t`Repay`}\n \n
\n {t`Since interest and value fluctuate all the time, the maximum value\n of max may not be able to fully pay off all loans.`}\n
\n
\n {t`Borrowed`}\n \n {formatAmt(borrowed, {\n symbol: displaySymbol || symbol,\n shorteningThreshold: 20,\n })}\n \n
\n
\n )}\n \n );\n};\nexport default BorrowModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { useMarketData } from \"@/hook/useMarketData\";\nimport { useWalletBalance } from \"@/hook/useWalletBalance\";\nimport { Button, Input, Segmented } from \"antd\";\nimport { useLendingPool } from \"@/hook/contracts/useLendingPool\";\nimport { BN_ZERO, formatAmt, formatAmtShort, formatPct, formattedToBigNumber, formatUSD } from \"src/utils/number\";\nimport { useEffect, useState } from \"react\";\nimport \"../index.less\";\nimport { AssetMarketData } from \"@/types/models\";\nimport { estimateWithdrawal, estimateDeposit } from \"@/utils/estimationHelper\";\nimport ListItem from \"./ListItem\";\nimport { useTracking } from \"@/hook/useTracking\";\nimport { BigNumber, valueToBigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport { useWallet } from \"@/hook/useWallet\";\nimport { ASSETS_DICT } from \"@/constants/assets\";\n\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { useUserData } from \"@/hook/useUserData\";\nimport { Trans, t } from \"@lingui/macro\";\nimport Link from \"antd/lib/typography/Link\";\n\nconst SupplyModal: React.FC = () => {\n const { args, closeModal, messageVisible, contentVisible } = useModalContext();\n\n const { data: marketData } = useMarketData();\n const { data: balance } = useWalletBalance();\n const { data: user } = useUserData();\n const [activeTab, setActiveTab] = useState(args.type);\n const [depositAmount, setDepositAmount] = useState(\"\");\n const [withdrawalAmount, setWithdrawalAmount] = useState(\"\");\n\n const { account, signer } = useWallet();\n const { deposit, withdraw } = useLendingPool(account, signer);\n\n const { withTracking } = useTracking();\n\n useEffect(() => {\n if (!messageVisible) {\n reset();\n }\n }, [messageVisible]);\n useEffect(() => {\n if (!contentVisible) {\n reset();\n }\n }, [contentVisible]);\n useEffect(() => {\n reset();\n }, [args]);\n\n const reset = () => {\n setActiveTab(args.type);\n setDepositAmount(\"\");\n setWithdrawalAmount(\"\");\n };\n\n if (!args.asset || !user) {\n return null;\n }\n const { marketReferenceCurrencyPriceInUSD = BN_ZERO, marketReferenceCurrencyDecimals = 0 } = marketData || {};\n\n const { asset }: { asset: AssetMarketData } = args;\n\n const userSummary = user.summary;\n const userAssetBalance = {\n ...user?.balanceByAsset[asset?.symbol],\n inWallet: balance[asset.symbol],\n };\n const { symbol, displaySymbol, depositAPY, depositIncentiveAPR, isFrozen } = asset;\n const { availableBorrowsInUSD, borrowLimitUsed, healthFactor } = userSummary;\n const { inWallet, deposited } = userAssetBalance;\n\n const depositAmountBn = formattedToBigNumber(depositAmount);\n const withdrawalAmountBn = formattedToBigNumber(withdrawalAmount);\n const estimation =\n activeTab === \"deposit\"\n ? estimateDeposit({\n amount: depositAmountBn,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n })\n : estimateWithdrawal({\n amount: withdrawalAmountBn,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n });\n\n const depositWithTracking = withTracking(\"deposit\", deposit);\n const withdrawWithTracking = withTracking(\"withdraw\", withdraw);\n\n const depositHandle = (amount: BigNumber) =>\n depositWithTracking({\n amount,\n underlyingAsset: asset.underlyingAsset,\n });\n const withdrawHandle = (amount: BigNumber, all: boolean) =>\n withdrawWithTracking({\n amount,\n underlyingAsset: asset.underlyingAsset,\n sTokenAddress: asset.sTokenAddress,\n all,\n });\n\n const isShowTip = asset.name === \"nASTR\" && activeTab === \"deposit\";\n return (\n
\n
\n \n
\n
\n \"\"\n

{asset.displaySymbol || asset.name}

\n
\n {\n setActiveTab(value as string);\n }}\n />\n {isShowTip ? (\n
\n \n To receive ASTR staking rewards from Algem, please supply your $nASTR via the{\" \"}\n \n SiO2 adapter\n {\" \"}\n within the Algem DApp.\n \n
\n ) : null}\n\n
\n {/* \n \n Amount \n \n */}\n {t`Amount`}\n {activeTab === \"deposit\" ? (\n {\n setDepositAmount(e.target.value);\n }}\n suffix={
setDepositAmount(formatAmt(estimation.maxAmount))}>{t`Max`}
}\n >\n ) : (\n setWithdrawalAmount(e.target.value)}\n suffix={\n \n setWithdrawalAmount(\n formatAmt(estimation.maxAmount, {\n decimalPlaces: asset.decimals,\n roundingMode: BigNumber.ROUND_FLOOR,\n })\n )\n }\n >\n {t`Max`}\n
\n }\n >\n )}\n
\n
\n

{t`Transaction overview`}

\n
\n \n \n \n \n \n {!asset.usageAsCollateralEnabled && (\n
\n
\n

\n

{t`This asset can't be used as collateral.`}

\n {/* {\"For more information, please \"}\n \n see our docs.\n */}\n

\n
\n )}\n
\n
\n\n {activeTab === \"deposit\" ? (\n
\n {\n closeModal();\n\n return depositHandle(valueToBigNumber(depositAmountBn!));\n }}\n disabled={!!estimation.unavailableReason}\n >\n {estimation.unavailableReason || t`Supply`}\n \n
\n {t`Wallet Balance`}\n \n {formatAmt(inWallet, {\n symbol: displaySymbol || symbol,\n shorteningThreshold: 20,\n })}\n \n
\n
\n ) : (\n
\n {\n closeModal();\n\n return withdrawHandle(valueToBigNumber(withdrawalAmountBn!), false);\n }}\n disabled={!!estimation.unavailableReason}\n >\n {estimation.unavailableReason || t`Withdraw`}\n \n
\n {t`Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete`}\n
\n
\n {t`Supply`}\n \n {formatAmt(deposited, {\n symbol: displaySymbol || symbol,\n shorteningThreshold: 20,\n })}\n \n
\n
\n )}\n
\n );\n};\nexport default SupplyModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { Button } from \"antd\";\nimport \"../index.less\";\nimport { t } from \"@lingui/macro\";\nconst StakeRewardClaimModal: React.FC = () => {\n const { closeModal } = useModalContext();\n return (\n
\n
\n \n
\n
\n {/* \"\" */}\n

{2}

\n
\n\n
\n {t`Transaction overview`}\n
\n
\n
\n \n
\n
\n );\n};\nexport default StakeRewardClaimModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { useMarketData } from \"@/hook/useMarketData\";\nimport { useWalletBalance } from \"@/hook/useWalletBalance\";\nimport { Button } from \"antd\";\nimport { useLendingPool } from \"@/hook/contracts/useLendingPool\";\nimport { ReactComponent as ImgArrowRight } from \"@img/icon_arrow-right.svg\";\nimport {\n BN_ZERO,\n formatAmt,\n formatAmtShort,\n formatPct,\n formatUSD,\n} from \"src/utils/number\";\nimport \"../index.less\";\nimport { AssetMarketData } from \"@/types/models\";\nimport { estimateUsageAsCollateral } from \"@/utils/estimationHelper\";\nimport ListItem from \"./ListItem\";\n\nimport { useWallet } from \"@/hook/useWallet\";\n\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { useUserData } from \"@/hook/useUserData\";\nimport { convertToUSD } from \"@/utils/calculator\";\nimport { t } from \"@lingui/macro\";\n\nconst BorrowModal: React.FC = () => {\n const { args, closeModal } = useModalContext();\n\n const { data: marketData } = useMarketData();\n const { data: balance } = useWalletBalance();\n const { data: user } = useUserData();\n\n const { account, signer } = useWallet();\n const { setUsageAsCollateral } = useLendingPool(account, signer);\n\n if (!args.asset || !user) {\n return null;\n }\n const {\n marketReferenceCurrencyPriceInUSD = BN_ZERO,\n marketReferenceCurrencyDecimals = 0,\n } = marketData || {};\n\n const { asset }: { asset: AssetMarketData } = args;\n\n const userSummary = user.summary;\n const userAssetBalance = {\n ...user?.balanceByAsset[asset?.symbol],\n inWallet: balance[asset.symbol],\n };\n const { priceInMarketReferenceCurrency, symbol, displaySymbol } = asset;\n const {\n totalCollateralInMarketReferenceCurrency,\n availableBorrowsInUSD,\n borrowLimitUsed,\n healthFactor,\n } = userSummary;\n const { deposited, usageAsCollateralEnabled } = userAssetBalance;\n\n const estimation = estimateUsageAsCollateral({\n usageAsCollateralEnabled: !usageAsCollateralEnabled,\n userAssetBalance,\n userSummary,\n asset,\n marketReferenceCurrencyPriceInUSD,\n marketReferenceCurrencyDecimals,\n });\n\n const totalCollateralInUSD =\n totalCollateralInMarketReferenceCurrency.multipliedBy(\n marketReferenceCurrencyPriceInUSD\n );\n const assetCollateralInUSD = convertToUSD(\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyPriceInUSD,\n deposited\n );\n\n return (\n
\n
\n \n
\n
\n \"\"\n

\n {asset.displaySymbol || asset.name} {t`Collateral`}\n

\n
\n\n
\n {usageAsCollateralEnabled ? t`ON` : t`OFF`}\n
\n \n \n \n
\n {usageAsCollateralEnabled ? t`OFF` : t`ON`}\n
\n\n
\n

{t`Transaction overview`}

\n
\n \n \n \n \n
\n
\n\n
\n {\n closeModal();\n setUsageAsCollateral(\n !usageAsCollateralEnabled,\n asset.underlyingAsset\n );\n }}\n disabled={!!estimation.unavailableReason}\n >\n {estimation.unavailableReason ||\n (usageAsCollateralEnabled ? t`Disable` : t`Enable`)}\n \n
\n {t`Deposited`}\n \n {formatAmt(deposited, {\n symbol: displaySymbol || symbol,\n shorteningThreshold: 20,\n })}\n \n
\n
\n
\n );\n};\nexport default BorrowModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\n\nimport { Button, Input } from \"antd\";\n\nimport { useState } from \"react\";\nimport \"../index.less\";\n\nimport { CloseOutlined } from \"@ant-design/icons\";\n\nconst BorrowModal: React.FC = () => {\n const { closeModal } = useModalContext();\n\n const [amount, setAmount] = useState(\"\");\n\n return (\n
\n
\n \n
\n
\n \"\"\n

Purchase

\n
\n\n
\n Purchase Amount\n setAmount(e.target.value)}\n >\n
\n\n
\n Total Price\n
\n
XXXX USDC
\n
\n
\n
\n

\n Disclaimer: Users need to be from an eligible jurisdiction to\n participate in this token sale.\n

\n {\n closeModal();\n }}\n disabled={!amount}\n >\n {`Purchase`}\n \n
\n
\n );\n};\nexport default BorrowModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { useResponsive } from \"ahooks\";\nimport { Drawer, Modal } from \"antd\";\nimport \"./index.less\";\nconst WrapModal: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const { contentVisible, closeModal } = useModalContext();\n const responsive = useResponsive();\n let WrapComponent: any = Drawer;\n let wrapProps: any = {\n className: \"modal-content-wrap\",\n height: \"auto\",\n placement: \"bottom\",\n\n visible: contentVisible,\n closable: false,\n\n onClose: () => closeModal(),\n };\n if (responsive.sm) {\n WrapComponent = Modal;\n wrapProps = {\n footer: null,\n wrapClassName: wrapProps.className,\n\n onCancel: wrapProps.onClose,\n visible: wrapProps.visible,\n closable: wrapProps.closable,\n };\n }\n return {children};\n};\nexport default WrapModal;\n","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport { Button, Space } from \"antd\";\nimport \"./index.less\";\nimport {\n SymbolWalletPolkadot,\n SymbolWalletTalisman,\n SymbolWalletSubWallet,\n} from \"src/assets/img/symbols/symbols\";\nconst ConnectWalletModal: React.FC = () => {\n const { closeModal } = useModalContext();\n\n return (\n
\n
\n \n
\n
\n

Connect Wallet

\n
\n\n \n \n \n \n \n
\n );\n};\n\nexport default ConnectWalletModal;\n","import React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport MessageModal from \"@/component/modal/MessageModal\";\nimport BorrowModal from \"@/component/modal/dashboard/BorrowModal\";\nimport SupplyModal from \"@/component/modal/dashboard/SupplyModal\";\nimport DashboardClaimModal from \"@/component/modal/dashboard/ClaimModal\";\n\nimport CollateralModal from \"@/component/modal/dashboard/CollateralModal\";\nimport PurchaseModal from \"@/component/modal/public/PurchaseModal\";\nimport WrapModal from \"@/component/modal/WrapModal\";\nimport { useWallet } from \"../useWallet\";\nimport { isSupportedChain } from \"@/libs/config\";\nimport { DEFAULT_CHAIN_ID } from \"@/utils/env\";\nimport type { MessageType, MessageData } from \"@/component/modal/MessageModal\";\nimport { t } from \"@lingui/macro\";\nimport ConnectWalletModal from \"@/component/modal/ConnectWalletModal\";\n\nexport type ModalType =\n | \"deposit\"\n | \"withdraw\"\n | \"borrow\"\n | \"repay\"\n | \"collateral\"\n | \"dashboardClaim\"\n | \"purchase\";\n\nexport type ModalContextType = {\n messageVisible: boolean;\n setMessageVisible: React.Dispatch>;\n openMessage: (data: any) => void;\n messageData: MessageData;\n\n contentVisible: boolean;\n setContentVisible: React.Dispatch>;\n openContent: (data: any) => void;\n\n args: any;\n setArgs: React.Dispatch>;\n closeModal: () => void;\n};\n\nexport const ModalContext = createContext(\n {} as ModalContextType\n);\n\nexport const ModalContextProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n const [messageVisible, setMessageVisible] = useState(false);\n const [messageData, setMessageData] = useState({\n type: \"\" as MessageType,\n title: \"\",\n message: \"\",\n });\n const [contentVisible, setContentVisible] = useState(false);\n const [args, setArgs] = useState({});\n const { chainId, switchChain } = useWallet();\n const isUnsupportedChain = useMemo(\n () => chainId && !isSupportedChain(chainId),\n [chainId]\n );\n\n useEffect(() => {\n if (isUnsupportedChain) {\n setContentVisible(false);\n }\n }, [isUnsupportedChain]);\n\n const closeModal = () => {\n setMessageVisible(false);\n\n setArgs({});\n setContentVisible(false);\n };\n const openMessage = (data: any) => {\n setMessageData(data);\n setMessageVisible(true);\n };\n const openContent = (data: any) => {\n if (isUnsupportedChain) {\n handleUnSupportChain();\n return;\n }\n\n setArgs(data);\n setContentVisible(true);\n };\n\n const handleUnSupportChain = () => {\n openMessage({\n type: \"warning\",\n title: t`You need to change to a supported chain`,\n message: t`Please switch the chain with your wallet.`,\n });\n if (switchChain) {\n switchChain(DEFAULT_CHAIN_ID).then(({ error }) => {\n if (!error) {\n setMessageVisible(false);\n return;\n }\n openMessage({\n title: `Failed to switch the chain`,\n message: error,\n type: \"error\",\n });\n });\n }\n };\n\n return (\n \n {children}\n \n {args.type === \"borrow\" || args.type === \"repay\" ? (\n \n ) : null}\n {args.type === \"deposit\" || args.type === \"withdraw\" ? (\n \n ) : null}\n {args.type === \"collateral\" ? (\n \n ) : null}\n {args.type === \"dashboardClaim\" ? (\n \n ) : null}\n {args.type === \"purchase\" ? : null}\n {args.type === \"connectWallet\" ? : null}\n \n \n \n );\n};\n\nexport const useModalContext = () => {\n const context = useContext(ModalContext);\n\n if (context === undefined) {\n throw new Error(\"useModalContext must be used within a ModalProvider\");\n }\n\n return context;\n};\n","import { To, useSearchParams } from \"react-router-dom\";\nimport { useNavigate as useOriginNavigate } from \"react-router-dom\";\n\nexport const SECRET_KEY = \"secret\";\nexport const SECRET_VALUE = \"dev-sio2\";\n\nexport const useNavigate = () => {\n let [searchParams] = useSearchParams();\n const navigate = useOriginNavigate();\n const navigatePush = (url: To) => {\n let secret = searchParams.get(SECRET_KEY);\n if (\n window.location.hostname === \"dev.sio2.finance\" &&\n secret === SECRET_VALUE\n ) {\n navigate(`${url}?${SECRET_KEY}=${secret}`);\n return;\n }\n navigate(url);\n };\n\n return navigatePush;\n};\n","import { RouteObject } from \"react-router-dom\";\nimport React from \"react\";\nimport { useWallet } from \"../useWallet\";\nimport { DEV_CHAIN } from \"@/constants/config\";\nimport { t } from \"@lingui/macro\";\n\nconst HomePage = React.lazy(() => import(\"@/view/dashboard/Dashboard\"));\nconst MarketsPage = React.lazy(() => import(\"@/view/market/Market\"));\n\nconst StakingPage = React.lazy(() => import(\"@/view/staking/Staking\"));\n\nconst PublicSalePage = React.lazy(() => import(\"@/view/public/PublicSale\"));\nconst FaucetPage = React.lazy(() => import(\"@/view/faucet/Faucet\"));\n\nexport type RouteObject_ = RouteObject & {\n isDev?: boolean;\n isTopHeader?: boolean;\n label?: string;\n isShowWithoutChain?: boolean;\n path: string;\n};\n\nexport const useRoutesArr = () => {\n const { chainId } = useWallet();\n let baseRoutes: RouteObject_[] = [\n {\n index: true,\n path: \"/dashboard\",\n element: ,\n isTopHeader: true,\n label: t`Dashboard`,\n },\n {\n path: \"/market\",\n element: ,\n isTopHeader: true,\n label: t`Market`,\n isShowWithoutChain: true,\n },\n\n {\n path: \"/staking\",\n element: ,\n isTopHeader: true,\n label: t`Stake`,\n },\n\n { path: \"*\", element: , label: t`Dashboard` },\n ];\n let devRoutes: RouteObject_[] = [\n {\n path: \"/public-sale\",\n element: ,\n isTopHeader: true,\n label: t`Public Sale`,\n },\n {\n path: \"/faucet\",\n element: ,\n isDev: true,\n isTopHeader: true,\n label: t`Faucet`,\n },\n ];\n let routes = [...baseRoutes];\n\n if (chainId && DEV_CHAIN.includes(chainId)) {\n routes = [...baseRoutes, ...devRoutes];\n }\n\n return {\n routes,\n };\n};\n","import { DEFAULT_GAS_PRICE, GAS_ESTIMATOR_POLL_INTERVAL, GAS_PRICE_SPEED } from \"@/constants/config\";\nimport { CHAIN_ID } from \"@/libs/config/network\";\nimport { BigNumber } from \"ethers\";\nimport { ChainId } from \"src/libs/config\";\n\nimport useSWR from \"swr\";\nimport { useStaticRPCProvider } from \"./useStaticRPCProvider\";\n\nconst isProd = process.env.REACT_APP_ENV === \"prod\";\nconst GAS_PRICE_URL = isProd ? \"https://gas.astar.network/api/gasnow\" : \"https://evm.shibuya.astar.network\";\n\nexport interface EstimatedGasPrice {\n timestamp: number;\n fastest: string;\n fast: string;\n slow: string;\n tip: { slow: string; fast: string; average: string };\n eip1559: {\n baseFeePerGas: string;\n priorityFeePerGas: { average: string; fast: string; slow: string };\n maxFeePerGas: string;\n maxPriorityFeePerGas: string;\n };\n average: string;\n}\ninterface EstimatedGasPriceResponse {\n code: number;\n data: EstimatedGasPrice;\n}\n\nexport const getGasPriceByChainId = async (\n chainId: ChainId\n): Promise<{ maxFeePerGas: string; maxPriorityFeePerGas: string }> => {\n const network = CHAIN_ID.astar === chainId ? \"astar\" : \"shibuya\";\n\n const response = await window.fetch(`${GAS_PRICE_URL}?network=${network}`, {\n method: \"GET\",\n redirect: \"follow\",\n });\n\n if (!response.ok) {\n return Promise.reject(`${response.status} ${response.statusText}`);\n }\n\n if (response.status === 200) {\n const estimatedGasPriceResponse = (await response.json()) as EstimatedGasPriceResponse;\n console.log(estimatedGasPriceResponse, \"estimatedGasPriceResponse\");\n return {\n maxFeePerGas: estimatedGasPriceResponse.data.eip1559.maxFeePerGas,\n maxPriorityFeePerGas: estimatedGasPriceResponse.data.eip1559.maxPriorityFeePerGas,\n };\n // return BigNumber.from(estimatedGasPriceResponse.data[GAS_PRICE_SPEED]);\n } else {\n return Promise.reject(\"Oops! Something went wrong!\");\n }\n\n // const response = await window.fetch(GAS_PRICE_URL, {\n // method: \"POST\",\n // headers: {\n // \"Content-Type\": \"application/json\",\n // },\n // body: JSON.stringify({\n // method: \"eth_gasPrice\",\n // params: [],\n // id: 1,\n // jsonrpc: \"2.0\",\n // }),\n // });\n\n // if (!response.ok) {\n // return Promise.reject(`${response.status} ${response.statusText}`);\n // }\n\n // if (response.status === 200) {\n // const estimatedGasPriceResponse = await response.json();\n\n // console.log(BigNumber.from(estimatedGasPriceResponse.result).toString(), \"getGasPriceAstar\");\n // console.log(BigNumber.from(estimatedGasPriceResponse.result).mul(120).div(100).toString(), \"getGasPriceAstar\");\n // return BigNumber.from(estimatedGasPriceResponse.result).mul(120).div(100);\n // } else {\n // return Promise.reject(\"Oops! Something went wrong!\");\n // }\n};\n\nexport const useGasPrice = () => {\n const { data } = useStaticRPCProvider();\n\n return useSWR(() => data?.chainId, getGasPriceByChainId, {\n refreshInterval: GAS_ESTIMATOR_POLL_INTERVAL,\n fallback: DEFAULT_GAS_PRICE.MIN,\n });\n};\n","import { useStakeData, useStakeInfoPage } from \"./../useStakeData\";\nimport { useModalContext } from \"../app/useModalContext\";\nimport { eEthereumTxType, EthereumTransactionTypeExtended } from \"submodule/packages/contract-helpers/dist/cjs\";\nimport { serializeError } from \"eth-rpc-errors\";\nimport { BigNumber, ethers } from \"ethers\";\nimport { useMarketData } from \"../useMarketData\";\nimport { useUserData } from \"../useUserData\";\nimport { useWalletBalance } from \"../useWalletBalance\";\nimport { useGasPrice } from \"../useGasPrice\";\nimport { DEFAULT_GAS_PRICE } from \"@/constants/config\";\nimport { t } from \"@lingui/macro\";\n\nexport type LendingPoolTxs = {\n actionTx?: EthereumTransactionTypeExtended;\n erc20ApprovalTx?: EthereumTransactionTypeExtended;\n debtErc20ApprovalTx?: EthereumTransactionTypeExtended;\n};\n\nexport const useTxHandler = () => {\n const { openMessage } = useModalContext();\n const { mutate: mutateMarketData } = useMarketData();\n const { mutate: mutateUserData } = useUserData();\n const { mutate: mutateWalletBalance } = useWalletBalance();\n const { mutate: mutateStakeInfoPage } = useStakeInfoPage();\n const { mutate: mutateStakeData } = useStakeData();\n const { data: estimatedGasPrice } = useGasPrice();\n const revalidate = () => {\n mutateMarketData();\n mutateUserData();\n mutateWalletBalance();\n mutateStakeInfoPage();\n mutateStakeData();\n };\n\n const handleTx = async (\n txs: EthereumTransactionTypeExtended[],\n signer: ethers.providers.JsonRpcSigner,\n onSucceeded?: VoidFunction\n ) => {\n openMessage({\n type: \"loading\",\n title: t`Transaction Preparing`,\n message: t`Waiting for transaction to be ready...`,\n });\n\n const gasPrice = estimatedGasPrice;\n console.log(gasPrice, \"gasPrice\");\n const { actionTx, erc20ApprovalTx, debtErc20ApprovalTx } = pickLendingPoolTxs(txs);\n\n try {\n if (erc20ApprovalTx) {\n openMessage({\n type: \"loading\",\n title: t`Confirm Transaction`,\n message: t`Approve sending the ERC-20 asset to the pool.`,\n });\n const tx = await erc20ApprovalTx.tx();\n const approveRes = await signer.sendTransaction({ ...tx, ...gasPrice });\n openMessage({\n type: \"loading\",\n title: t`Transaction Pending`,\n message: t`Waiting for the transaction to be confirmed...`,\n });\n await approveRes.wait(1);\n }\n if (debtErc20ApprovalTx) {\n openMessage({\n type: \"loading\",\n title: t`Confirm Transaction`,\n message: t`Approve the contract to borrow ERC-20 assets on your credit.`,\n });\n const tx = await debtErc20ApprovalTx.tx();\n const approveRes = await signer.sendTransaction({ ...tx, ...gasPrice });\n openMessage({\n type: \"loading\",\n title: t`Transaction Pending`,\n message: t`Waiting for the transaction to be confirmed...`,\n });\n await approveRes.wait(1);\n }\n if (actionTx) {\n openMessage({\n type: \"loading\",\n title: t`Confirm Transaction`,\n message: t`Confirm the transaction.`,\n });\n const tx = await actionTx.tx();\n const depositRes = await signer.sendTransaction({\n ...tx,\n value: tx.value ? BigNumber.from(tx.value) : undefined,\n ...gasPrice,\n });\n openMessage({\n type: \"submitted\",\n title: t`Transaction Submitted`,\n });\n await depositRes.wait(1);\n revalidate();\n openMessage({\n type: \"success\",\n title: t`Succeeded!`,\n message: t`Your transaction confirmed!`,\n onClose: onSucceeded,\n });\n }\n } catch (e) {\n const error = serializeError(e);\n if (error.code === 4001) {\n openMessage({\n type: \"cancel\",\n title: t`Transaction Canceled`,\n message: t`You have canceled the transaction.`,\n });\n return { error: error.code };\n }\n let msg_ = (error.data as any)?.originalError?.error?.message || \"\";\n\n let msg = msg_.match(/revert\\s(.*)/)?.[1];\n openMessage({\n type: \"error\",\n title: t`Error`,\n // message: t`Something went wrong...`,\n message: msg,\n });\n console.error(error, error.message, error.data);\n return { error: error.code };\n }\n };\n\n return { handleTx };\n};\n\nconst pickLendingPoolTxs = (txs: EthereumTransactionTypeExtended[]) =>\n txs.reduce((prev, current) => {\n if (current.txType === eEthereumTxType.ERC20_APPROVAL) return { ...prev, erc20ApprovalTx: current };\n if (current.txType === eEthereumTxType.DEBTERC20_APPROVAL) return { ...prev, debtErc20ApprovalTx: current };\n return { ...prev, actionTx: current };\n }, {});\n","import {\n BigNumber,\n ReserveIncentiveDict,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { FormattedReserveData } from \"src/libs/pool-data-provider\";\nimport { AssetMarketData, AssetSymbol } from \"src/types/models\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { assetFromSymbol } from \"src/utils/assets\";\nimport { convertToUSDBulk } from \"src/utils/calculator\";\nimport { ValueOf } from \"type-fest\";\n\nconst EMPTY_INCENTIVE: ValueOf = {\n sIncentives: { incentiveAPR: \"0\", rewardTokenAddress: \"\" },\n vdIncentives: { incentiveAPR: \"0\", rewardTokenAddress: \"\" },\n sdIncentives: { incentiveAPR: \"0\", rewardTokenAddress: \"\" },\n};\n\nexport const toAssetMarketData = (\n marketReferenceCurrencyPriceInUSD: BigNumber,\n reserve: Omit & { symbol: AssetSymbol },\n incentive: ValueOf = EMPTY_INCENTIVE\n): AssetMarketData => {\n const [liquidityInUSD, totalDepositedInUSD, totalBorrowedInUSD] =\n convertToUSDBulk(\n valueToBigNumber(reserve.priceInMarketReferenceCurrency),\n marketReferenceCurrencyPriceInUSD,\n valueToBigNumber(reserve.availableLiquidity),\n valueToBigNumber(reserve.totalLiquidity),\n valueToBigNumber(reserve.totalVariableDebt).plus(reserve.totalStableDebt)\n );\n return {\n ...assetFromSymbol(reserve.symbol),\n underlyingAsset: reserve.underlyingAsset.toLowerCase() as EthereumAddress,\n depositAPY: valueToBigNumber(reserve.supplyAPY),\n variableBorrowAPY: valueToBigNumber(reserve.variableBorrowAPY),\n depositIncentiveAPR: valueToBigNumber(incentive.sIncentives.incentiveAPR),\n variableBorrowIncentiveAPR: valueToBigNumber(\n incentive.vdIncentives.incentiveAPR\n ),\n liquidity: valueToBigNumber(reserve.availableLiquidity),\n liquidityInUSD,\n totalDepositedInUSD,\n totalBorrowedInUSD,\n baseLTVasCollateral: valueToBigNumber(reserve.baseLTVasCollateral),\n priceInMarketReferenceCurrency: valueToBigNumber(\n reserve.priceInMarketReferenceCurrency\n ),\n reserveLiquidationThreshold: valueToBigNumber(\n reserve.reserveLiquidationThreshold\n ),\n usageAsCollateralEnabled: reserve.usageAsCollateralEnabled,\n reserveFactor: valueToBigNumber(reserve.reserveFactor),\n liquidationPenalty: valueToBigNumber(reserve.reserveLiquidationBonus),\n decimals: reserve.decimals,\n sTokenAddress: reserve.sTokenAddress as EthereumAddress,\n vdTokenAddress: reserve.variableDebtTokenAddress as EthereumAddress,\n isActive: reserve.isActive,\n isFrozen: reserve.isFrozen,\n borrowingEnabled: reserve.borrowingEnabled,\n };\n};\n","import { BigNumber } from \"submodule/packages/math-utils/dist/cjs\";\nimport dayjs from \"dayjs\";\nimport { ChainId, getNetworkConfig } from \"src/libs/config\";\nimport { PoolDataProviderInterface } from \"src/libs/pool-data-provider\";\nimport { onlyListed } from \"src/utils/assets\";\nimport useSWR from \"swr\";\nimport { usePoolDataProvider } from \"../usePoolDataProvider\";\nimport { toAssetMarketData } from \"./converters\";\nimport { MarketData } from \"./types\";\n\nexport type { MarketData };\n\nexport const useMarketData = () => {\n const { data } = usePoolDataProvider();\n //const { data: sio2PriceInUSD } = useSiO2Price();\n // TODO: just for test, remove if with a solution\n const sio2PriceInUSD = new BigNumber(\"1\");\n return useSWR(\n () => data && sio2PriceInUSD && [\"marketdata\", data?.chainId],\n (_key: string, chainId: ChainId) => getMarketData(data!.provider, chainId, sio2PriceInUSD!),\n { dedupingInterval: 10000, refreshInterval: 15000 }\n );\n};\n\nconst getMarketData = async (\n provider: PoolDataProviderInterface,\n chainId: ChainId,\n sio2PriceInUSD: BigNumber\n): Promise => {\n const currentTimestamp = dayjs().unix();\n const { rewardToken } = getNetworkConfig(chainId);\n const { reservesData, incentivesByUnderlyingAsset, marketReferenceCurrencyPriceInUSD, ...rawData } =\n await provider.getReservesWithIncentives(currentTimestamp, {\n address: rewardToken.underlyingAsset,\n priceInUSD: sio2PriceInUSD,\n });\n console.log(`reservesData:`, reservesData, marketReferenceCurrencyPriceInUSD, incentivesByUnderlyingAsset);\n const assets = reservesData\n .filter(onlyListed)\n .filter((asset) => !asset.isFrozen || asset.symbol === \"BUSD\")\n .map((reserve) =>\n toAssetMarketData(\n marketReferenceCurrencyPriceInUSD,\n reserve,\n incentivesByUnderlyingAsset[reserve.underlyingAsset]\n )\n );\n\n console.log(`assets:`, assets);\n\n return {\n assets,\n marketReferenceCurrencyPriceInUSD,\n marketTimestamp: currentTimestamp,\n chainId,\n ...rawData,\n };\n};\n","import { getPoolDataProvider } from 'src/libs/pool-data-provider'\nimport useSWRImmutable from 'swr/immutable'\nimport { useStaticRPCProvider } from './useStaticRPCProvider'\n\nexport const usePoolDataProvider = () => {\n const { data: provider } = useStaticRPCProvider()\n return useSWRImmutable(\n provider && ['pooldataprovider', provider.chainId],\n () => getPoolDataProvider(provider!),\n )\n}\n","import { StakeUiHelper } from \"submodule/packages/contract-helpers/dist/cjs\";\nimport {\n StakeDataHumanized,\n StakeGeneralDataT,\n StakeUserDataT,\n} from \"submodule/packages/contract-helpers/dist/cjs/stake-ui-helper/types/stake\";\nimport {\n BigNumber,\n normalizeBN,\n valueToBigNumber,\n valueToZDBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { BN_ZERO } from \"src/utils/number\";\nimport { getNetworkConfig } from \"../config\";\nimport { StaticRPCProvider } from \"../pool-data-provider\";\nconst SECONDS_PER_MONTH = valueToZDBigNumber(2_592_000);\nconst BN_DECIMAL_PRECISION = valueToZDBigNumber(1e18);\n\nexport const stakeUiHelperContract = (\n provider: StaticRPCProvider\n): StakeUiHelperInterface => StakeUiHelperWrapper.new(provider);\n\nexport type StakeUiHelperInterface = {\n getUserUIDataHumanized: (account: string) => Promise;\n};\n\nclass StakeUiHelperWrapper implements StakeUiHelperInterface {\n constructor(private proivder: StakeUiHelper) {}\n\n static new = ({ chainId, provider }: StaticRPCProvider) => {\n const {\n addresses: { stakeUiHelper },\n } = getNetworkConfig(chainId);\n return new StakeUiHelperWrapper(\n new StakeUiHelper({\n stakeUiHelperAddress: stakeUiHelper || \"0x000\",\n provider,\n })\n );\n };\n\n getUserUIDataHumanized = async (account: string) => {\n const { proivder } = this;\n const data = await proivder.getUserUIDataHumanized(account);\n\n return computeStakeData(data);\n };\n}\n\ntype ComputedStakeData = StakeGeneralDataT &\n StakeUserDataT & {\n distributionPerDay: BigNumber;\n userCooldownEndTime: number;\n userEarningsPerDay: BigNumber;\n };\n\nconst getDistributionPerSecond = (\n intialSupply: string,\n inflactionStart: string,\n decayRatio: string\n): BigNumber => {\n const currentTime: number = Date.parse(new Date().toString()) / 1000;\n const curSpan = valueToZDBigNumber(currentTime)\n .minus(valueToZDBigNumber(inflactionStart))\n .dividedBy(SECONDS_PER_MONTH);\n const emissionPerSecond = valueToZDBigNumber(intialSupply)\n .multipliedBy(\n valueToBigNumber(decayRatio)\n .dividedBy(BN_DECIMAL_PRECISION)\n .exponentiatedBy(curSpan)\n )\n .dividedBy(SECONDS_PER_MONTH);\n\n return emissionPerSecond || BN_ZERO;\n};\n\nconst computeStakeData = (data: StakeDataHumanized): ComputedStakeData => ({\n stakeTokenTotalSupply: normalizeBN(data.stakeTokenTotalSupply, 18),\n stakeCooldownSeconds: valueToBigNumber(data.stakeCooldownSeconds),\n stakeUnstakeWindow: data.stakeUnstakeWindow,\n stakeTokenPriceEth: normalizeBN(data.stakeTokenPriceEth, 18),\n rewardTokenPriceEth: normalizeBN(data.rewardTokenPriceEth, 18),\n stakeApy: normalizeBN(data.stakeApy, 4),\n intialSupply: valueToBigNumber(data.intialSupply),\n inflactionStart: valueToBigNumber(data.inflactionStart),\n decayRatio: valueToBigNumber(data.decayRatio),\n stakeTokenUserBalance: normalizeBN(data.stakeTokenUserBalance, 18),\n underlyingTokenUserBalance: normalizeBN(data.underlyingTokenUserBalance, 18),\n userCooldown: data.userCooldown,\n userIncentivesToClaim: normalizeBN(data.userIncentivesToClaim, 18),\n userPermitNonce: valueToBigNumber(data.userPermitNonce),\n distributionPerDay: normalizeBN(\n getDistributionPerSecond(\n data.intialSupply,\n data.inflactionStart,\n data.decayRatio\n ).multipliedBy(60 * 60 * 24),\n 18\n ),\n userCooldownEndTime: 0,\n userEarningsPerDay:\n data.stakeTokenUserBalance !== \"0\"\n ? normalizeBN(\n getDistributionPerSecond(\n data.intialSupply,\n data.inflactionStart,\n data.decayRatio\n )\n .multipliedBy(60 * 60 * 24)\n .multipliedBy(data.stakeTokenUserBalance)\n .div(data.stakeTokenTotalSupply)\n .toString(),\n 18\n )\n : BN_ZERO,\n});\n","import { ChainId } from \"src/libs/config\";\nimport {\n stakeUiHelperContract,\n StakeUiHelperInterface,\n} from \"src/libs/stake-ui-helper\";\nimport { StakeData } from \"src/types/models\";\nimport { SWRResponseWithFallback } from \"src/types/swr\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { BN_ZERO } from \"src/utils/number\";\nimport useSWR from \"swr\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { useStaticRPCProvider } from \"./useStaticRPCProvider\";\nimport { useWallet } from \"./useWallet\";\nimport { StakingInterface } from \"submodule/packages/contract-helpers/dist/cjs/staking-contract/index\";\nimport { StakeInfosByPage } from \"submodule/packages/contract-helpers/dist/cjs/staking-contract/types\";\nimport { stakenContract } from \"../libs/staken\";\n\nexport const ORGIN_PAGINATION = {\n page: 0,\n pageSize: 10,\n allPageSize: 1000,\n};\n\nconst EMPTY_STAKE_DATA: StakeData = {\n stakeApy: BN_ZERO,\n stakeTokenTotalSupply: BN_ZERO,\n stakeTokenUserBalance: BN_ZERO,\n distributionPerDay: BN_ZERO,\n userIncentivesToClaim: BN_ZERO,\n};\n\nconst EMPTY_STAKE_PAGE: StakeInfosByPage = {\n pageSt: \"0\",\n pageInfo: [],\n};\n\nexport const useStakeData = () => {\n const { account } = useWallet();\n const { data: provider } = useStakeUiHelper();\n return useSWR(\n () => account && provider && [\"stakedata\", provider.chainId, account],\n (_key: string, _chainId: ChainId, account: EthereumAddress) =>\n getUnclaimedBalance(provider!.provider, account),\n { fallbackData: EMPTY_STAKE_DATA }\n ) as SWRResponseWithFallback;\n};\n\nconst useStakeUiHelper = () => {\n const { data: provider } = useStaticRPCProvider();\n return useSWRImmutable(\n provider && [\"stakeuihelper\", provider.chainId],\n () => ({\n chainId: provider!.chainId,\n provider: stakeUiHelperContract(provider!),\n })\n );\n};\n\nconst useStakeInfo = () => {\n const { data: provider } = useStaticRPCProvider();\n\n return useSWRImmutable(\n provider && [\"stakeInfo\", provider.chainId],\n (_key: string, _chainId: ChainId) => ({\n chainId: provider!.chainId,\n provider: stakenContract(provider!),\n })\n );\n};\n\nconst getUnclaimedBalance = async (\n provider: StakeUiHelperInterface,\n account: EthereumAddress\n): Promise => provider.getUserUIDataHumanized(account);\n\nexport const useStakeInfoPage = (pageSt?: string, pageSz?: string) => {\n const { account } = useWallet();\n const { data: provider } = useStakeInfo();\n return useSWR(\n () => account && provider && [\"stakeInfoPage\", provider.chainId, account],\n (_key: string, _chainId: ChainId, account: EthereumAddress) => {\n return getStakeInfoPage(provider!.provider, account, pageSt, pageSz);\n },\n\n { fallbackData: EMPTY_STAKE_PAGE }\n ) as SWRResponseWithFallback;\n};\n\nconst getStakeInfoPage = async (\n provider: StakingInterface,\n account: EthereumAddress,\n pageSt: string = ORGIN_PAGINATION.page.toString(),\n pageSz: string = ORGIN_PAGINATION.allPageSize.toString()\n): Promise => {\n let data = await provider.getStateInfosByPage(account, pageSt, pageSz);\n\n return {\n pageSt: data.pageSt,\n pageInfo: data.pageInfo?.map((item: any) => {\n return {\n ...item,\n veToken: (item.amount * Math.pow(2, item.mode)).toString(),\n };\n }),\n };\n};\n\nexport const useStakeInfoSize = () => {\n const { account } = useWallet();\n const { data: provider } = useStakeInfo();\n return useSWR(\n () => account && provider && [\"stakeInfoSz\", provider.chainId, account],\n (_key: string, _chainId: ChainId, account: EthereumAddress) =>\n getStakeInfoSz(provider!.provider, account),\n { fallbackData: \"0\" }\n ) as SWRResponseWithFallback;\n};\n\nconst getStakeInfoSz = async (\n provider: StakingInterface,\n account: EthereumAddress\n): Promise => (await provider.getStakeInfoSize(account)).toString();\n","import { ethers } from 'ethers'\nimport { ChainId, getNetworkConfig } from 'src/libs/config'\n\nexport const getProvider = (chainId: ChainId): ethers.providers.Provider => {\n const config = getNetworkConfig(chainId)\n if (config.privateJsonRPCUrl) {\n return new ethers.providers.StaticJsonRpcProvider(\n config.privateJsonRPCUrl,\n chainId,\n )\n }\n const chainProviders = config.publicJsonRPCUrl.map(\n (rpc) => new ethers.providers.StaticJsonRpcProvider(rpc, chainId),\n )\n if (!chainProviders.length) {\n throw new Error(`${chainId} has no jsonRPCUrl configured`)\n }\n if (chainProviders.length === 1) {\n return chainProviders[0]\n }\n return new ethers.providers.FallbackProvider(chainProviders)\n}\n","import { ChainId, isSupportedChain } from \"src/libs/config\";\nimport { getProvider } from \"src/libs/static-rpc-provider\";\nimport { DEFAULT_CHAIN_ID } from \"src/utils/env\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { useWallet } from \"./useWallet\";\n\nexport const useStaticRPCProvider = () => {\n const { chainId } = useWallet();\n const currentChainId = isSupportedChain(chainId) ? chainId : DEFAULT_CHAIN_ID;\n return useSWRImmutable(\n [\"staticrpcprovider\", currentChainId],\n (_key: string, chainId: ChainId) => ({\n chainId,\n provider: getProvider(chainId),\n })\n );\n};\n","import {\n BigNumber,\n ComputedUserReserve,\n FormatUserSummaryResponse,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { ChainId } from \"src/libs/config\";\nimport { PoolDataProviderInterface } from \"src/libs/pool-data-provider/types\";\nimport { User } from \"src/types/models\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { EMPTY_BALANCE_BY_ASSET } from \"src/utils/assets\";\nimport { calculateNetAPY } from \"src/utils/calculator\";\nimport { BN_ZERO } from \"src/utils/number\";\nimport useSWR from \"swr\";\nimport { MarketData, useMarketData } from \"./useMarketData\";\nimport { usePoolDataProvider } from \"./usePoolDataProvider\";\nimport { useWallet } from \"./useWallet\";\n\nexport const useUserData = () => {\n const { account } = useWallet();\n const { data } = usePoolDataProvider();\n const { data: marketData } = useMarketData();\n return useSWR(\n () =>\n data &&\n account &&\n data.chainId === marketData?.chainId && [\n \"userdata\",\n data.chainId,\n account,\n ],\n (_key: string, _chainId: ChainId, account: EthereumAddress) =>\n getUserData(data!.provider, account, marketData!)\n );\n};\n\nconst getUserData = async (\n provider: PoolDataProviderInterface,\n account: EthereumAddress,\n marketData: MarketData\n): Promise => {\n const { reserves, incentive } = await provider.getUserReservesWithIncentive(\n account,\n {\n reservesData: marketData.rawReservesData,\n baseCurrencyData: marketData.rawBaseCurrencyData,\n reserveIncentivesData: marketData.rawReserveIncentivesData,\n timestamp: marketData.marketTimestamp,\n }\n );\n return toUser(reserves, incentive, marketData);\n};\n\nconst toUser = (\n userReserves: FormatUserSummaryResponse,\n incentive: {\n address: EthereumAddress;\n underlyingAsset: EthereumAddress;\n unclaimedBalance: BigNumber;\n },\n { assets, marketReferenceCurrencyPriceInUSD }: MarketData\n): User => {\n const totalDepositedInUSD = valueToBigNumber(userReserves.totalLiquidityUSD);\n const totalBorrowedInUSD = valueToBigNumber(userReserves.totalBorrowsUSD);\n const availableBorrowsInUSD = valueToBigNumber(\n userReserves.availableBorrowsUSD\n );\n\n const borrowLimitInUSD = totalBorrowedInUSD.plus(availableBorrowsInUSD);\n const balanceByAsset = toBalanceByAsset(userReserves.userReservesData);\n const netAPY = calculateNetAPY(\n balanceByAsset,\n assets,\n marketReferenceCurrencyPriceInUSD,\n totalDepositedInUSD\n );\n\n return {\n summary: {\n totalDepositedInUSD,\n totalBorrowedInMarketReferenceCurrency: valueToBigNumber(\n userReserves.totalBorrowsMarketReferenceCurrency\n ),\n totalBorrowedInUSD,\n totalCollateralInMarketReferenceCurrency: valueToBigNumber(\n userReserves.totalCollateralMarketReferenceCurrency\n ),\n availableBorrowsInUSD,\n borrowLimitInUSD,\n borrowLimitUsed: borrowLimitInUSD.gt(BN_ZERO)\n ? totalBorrowedInUSD.dividedBy(borrowLimitInUSD)\n : undefined,\n currentLiquidationThreshold: valueToBigNumber(\n userReserves.currentLiquidationThreshold\n ),\n healthFactor: valueToBigNumber(userReserves.healthFactor),\n netAPY,\n },\n balanceByAsset,\n rewards: incentive,\n };\n};\n\nconst toBalanceByAsset = (userReservesData: ComputedUserReserve[]) =>\n userReservesData.reduce(\n (prev, { reserve: { symbol }, ...userReserve }) => ({\n ...prev,\n [symbol]: {\n deposited: valueToBigNumber(userReserve.underlyingBalance),\n borrowed: valueToBigNumber(userReserve.totalBorrows),\n usageAsCollateralEnabled: userReserve.usageAsCollateralEnabledOnUser,\n },\n }),\n EMPTY_BALANCE_BY_ASSET\n );\n","import { BigNumber } from \"ethers\";\nimport { ChainId, CHAIN_ID, NETWORK_CONFIG } from \"./network\";\n\nexport const getChainInfo = (chainId: number) =>\n // @ts-expect-error\n CHIAN_INFO[chainId];\n\nconst toChainIdHex = (chainId: number) =>\n `0x${(+BigNumber.from(chainId)).toString(16)}`;\n\nconst CHIAN_INFO: Record = {\n [CHAIN_ID.astar]: {\n chainId: toChainIdHex(CHAIN_ID.astar),\n chainName: NETWORK_CONFIG[CHAIN_ID.astar].name,\n nativeCurrency: {\n name: \"Astar\",\n symbol: NETWORK_CONFIG[CHAIN_ID.astar].baseAsset.symbol,\n decimals: 18,\n },\n rpcUrls: [...NETWORK_CONFIG[CHAIN_ID.astar].publicJsonRPCUrl],\n blockExplorerUrls: NETWORK_CONFIG[CHAIN_ID.astar].explorerLinks,\n },\n [CHAIN_ID.shibuya]: {\n chainId: toChainIdHex(CHAIN_ID.shibuya),\n chainName: NETWORK_CONFIG[CHAIN_ID.shibuya].name,\n nativeCurrency: {\n name: \"Shibuya\",\n symbol: NETWORK_CONFIG[CHAIN_ID.shibuya].baseAsset.symbol,\n decimals: 18,\n },\n rpcUrls: [...NETWORK_CONFIG[CHAIN_ID.shibuya].publicJsonRPCUrl],\n blockExplorerUrls: NETWORK_CONFIG[CHAIN_ID.shibuya].explorerLinks,\n },\n [CHAIN_ID.dev]: {\n chainId: toChainIdHex(CHAIN_ID.dev),\n chainName: NETWORK_CONFIG[CHAIN_ID.dev].name,\n nativeCurrency: {\n name: \"local\",\n symbol: NETWORK_CONFIG[CHAIN_ID.dev].baseAsset.symbol,\n decimals: 18,\n },\n rpcUrls: [...NETWORK_CONFIG[CHAIN_ID.dev].publicJsonRPCUrl],\n blockExplorerUrls: NETWORK_CONFIG[CHAIN_ID.dev].explorerLinks,\n },\n};\n","import { useWeb3React } from \"@web3-react/core\";\nimport { ethers } from \"ethers\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport { ChainId } from \"src/libs/config\";\nimport { getChainInfo } from \"src/libs/config/chain\";\nimport { getConnector, metamask, WalletType } from \"src/libs/wallet-provider\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { useSWRLocal } from \"./base/useSWRLocal\";\nimport { safeMultisigConnector } from \"@/libs/wallet-provider/providers/safe\";\nimport { useSafeAppConnection } from \"@gnosis.pm/safe-apps-web3-react\";\n\ntype ActiveWallet = {\n type: WalletType;\n onDisconnect?: VoidFunction;\n};\ntype WalletInterface = {\n error: Error | undefined;\n active: boolean;\n chainId: number | undefined;\n account: EthereumAddress | null | undefined;\n library: ethers.providers.Web3Provider | undefined;\n signer: ethers.providers.JsonRpcSigner | undefined;\n activeWalletType: WalletType | null | undefined;\n connect: (type: WalletType) => Promise;\n disconnect: () => void;\n switchChain?: (chainId: ChainId) => Promise<{ error?: string }>;\n};\nconst useActiveWallet = () => useSWRLocal(\"wallet-active\");\n\nexport const useWallet = (): WalletInterface => { \n const triedToConnectToSafe = useSafeAppConnection(safeMultisigConnector.connector);\n \n const { library, error, account, active, chainId, activate, deactivate } =\n useWeb3React();\n\n const signer = useMemo(() => library?.getSigner(), [library]);\n const { data: activeWallet, mutate: mutateActiveWallet } = useActiveWallet();\n\n const connect = useCallback(\n async (type: WalletType) => {\n const { connector, onConnect, onDisconnect } = getConnector(type);\n if (onConnect) await onConnect();\n await activate(connector, undefined, true);\n await mutateActiveWallet({ type, onDisconnect });\n },\n [activate]\n );\n\n const disconnect = useCallback(async () => {\n if (activeWallet?.onDisconnect) activeWallet.onDisconnect();\n // await mutateActiveWallet(null);\n deactivate();\n }, [activeWallet, deactivate]);\n\n const switchChain = useCallback(\n async (chainId: ChainId) => {\n return metamask.requestSwitchChain(chainId, getChainInfo(chainId));\n },\n [activeWallet]\n );\n\n useEffect(() => {\n if (library && activeWallet?.type !== \"Metamask\") return;\n metamask.addListenersOnConnected(connect, disconnect);\n return metamask.removeAllListeners;\n }, [library, activeWallet, connect, disconnect]);\n\n useEffect(() => {\n if (!connect || activeWallet?.type === \"Metamask\") return;\n metamask.connectIfAuthorized(connect);\n }, [connect, activeWallet]);\n\n useEffect(() => {\n async function checkSafeContext(){\n const isSafe = await safeMultisigConnector.connector.isSafeApp()\n if(isSafe) await mutateActiveWallet( { type: \"Safe\", undefined} as ActiveWallet);\n }\n if(triedToConnectToSafe) checkSafeContext();\n }, [triedToConnectToSafe]);\n\n return {\n error,\n active,\n chainId,\n account: account as WalletInterface[\"account\"],\n library,\n signer,\n activeWalletType: activeWallet?.type,\n connect,\n disconnect,\n switchChain: activeWallet?.type === \"Metamask\" ? switchChain : undefined,\n };\n};\n","import useSWRImmutable from 'swr/immutable'\n\nexport const useSWRLocal = (key: string) => useSWRImmutable(key, null)\n","import { WalletBalanceProvider } from \"submodule/packages/contract-helpers/dist/cjs\";\nimport { BigNumber } from \"ethers\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { getMarketConfig, getNetworkConfig, NetworkConfig } from \"../config\";\nimport { StaticRPCProvider } from \"../pool-data-provider\";\n\nexport const walletBalanceProviderContract = (\n provider: StaticRPCProvider\n): WalletBalanceProviderInterface => WalletBalanceProviderWrapper.new(provider);\n\nexport type WalletBalanceProviderInterface = {\n getBeforeNormalizedWalletBalance: (\n account: string\n ) => Promise<{ [key in EthereumAddress]: BigNumber }>;\n getBalance: (account: string, token: string) => Promise;\n};\n\nclass WalletBalanceProviderWrapper implements WalletBalanceProviderInterface {\n constructor(\n private proivder: WalletBalanceProvider,\n private lendingPoolAddressProvider: EthereumAddress,\n private baseAsset: NetworkConfig[\"baseAsset\"]\n ) {}\n\n static new = ({ chainId, provider }: StaticRPCProvider) => {\n const {\n addresses: { walletBalanceProvider },\n baseAsset,\n } = getNetworkConfig(chainId);\n const {\n addresses: { LENDING_POOL_ADDRESS_PROVIDER },\n } = getMarketConfig(chainId);\n return new WalletBalanceProviderWrapper(\n new WalletBalanceProvider({\n walletBalanceProviderAddress: walletBalanceProvider,\n provider,\n }),\n LENDING_POOL_ADDRESS_PROVIDER,\n baseAsset\n );\n };\n\n getBeforeNormalizedWalletBalance = async (account: string) => {\n const { proivder, lendingPoolAddressProvider } = this;\n const { 0: underlyingAssets, 1: balances } =\n await proivder.getUserWalletBalancesForLendingPoolProvider(\n account,\n lendingPoolAddressProvider\n );\n return underlyingAssets.reduce((prev, asset, idx) => {\n return {\n ...prev,\n [asset.toLowerCase()]: balances[idx],\n };\n }, {}) as { [key in EthereumAddress]: BigNumber };\n };\n\n getBalance = async (account: string, token: string) => {\n return this.proivder.balanceOf(account, token);\n };\n}\n","import { normalizeBN } from \"submodule/packages/math-utils/dist/cjs\";\nimport { ASSETS_DICT } from \"src/constants/assets\";\nimport { ChainId, getNetworkConfig } from \"src/libs/config\";\nimport {\n walletBalanceProviderContract,\n WalletBalanceProviderInterface,\n} from \"src/libs/wallet-balance-provider\";\nimport { AssetSymbol, WalletBalance } from \"src/types/models\";\nimport { SWRResponseWithFallback } from \"src/types/swr\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { generateSymbolDict } from \"src/utils/assets\";\nimport { BN_ZERO } from \"src/utils/number\";\nimport useSWR from \"swr\";\nimport useSWRImmutable from \"swr/immutable\";\nimport { useMarketData } from \"./useMarketData\";\nimport { useStaticRPCProvider } from \"./useStaticRPCProvider\";\nimport { useWallet } from \"./useWallet\";\n\nconst EMPTY_WALLET_BALANCE: WalletBalance = generateSymbolDict(BN_ZERO);\n\nexport const useWalletBalance = () => {\n const { account } = useWallet();\n const { data: provider } = useWalletBalanceProvider();\n const { data: marketData } = useMarketData();\n return useSWR(\n () =>\n account &&\n provider &&\n provider.chainId === marketData?.chainId && [\n \"wallet-balance\",\n provider.chainId,\n account,\n ],\n (_key: string, chainId: ChainId, account: EthereumAddress) => {\n const { rewardToken } = getNetworkConfig(chainId);\n return getWalletBalance(provider!.provider, account, marketData!.assets, {\n symbol: ASSETS_DICT.SiO2.symbol,\n underlyingAsset: rewardToken.underlyingAsset,\n decimals: rewardToken.decimals,\n });\n },\n { fallbackData: EMPTY_WALLET_BALANCE }\n ) as SWRResponseWithFallback;\n};\n\nconst useWalletBalanceProvider = () => {\n const { data: provider } = useStaticRPCProvider();\n return useSWRImmutable(\n provider && [\"walletbalanceprovider\", provider.chainId],\n () => ({\n chainId: provider!.chainId,\n provider: walletBalanceProviderContract(provider!),\n })\n );\n};\n\nconst getWalletBalance = async (\n walletBalanceProvider: WalletBalanceProviderInterface,\n account: EthereumAddress,\n assets: {\n symbol: AssetSymbol;\n underlyingAsset: EthereumAddress;\n decimals: number;\n }[],\n rewardToken: {\n symbol: AssetSymbol;\n underlyingAsset: EthereumAddress;\n decimals: number;\n }\n): Promise => {\n const balancesDict =\n await walletBalanceProvider.getBeforeNormalizedWalletBalance(account);\n\n const balances = assets.reduce((prev, asset) => {\n const balance =\n balancesDict[asset.underlyingAsset.toLowerCase() as EthereumAddress];\n return {\n ...prev,\n [asset.symbol]: balance\n ? normalizeBN(balance.toString(), asset.decimals)\n : BN_ZERO,\n };\n }, {}) as WalletBalance;\n\n let rewardBalance = {};\n try {\n rewardBalance = await walletBalanceProvider.getBalance(\n account,\n rewardToken.underlyingAsset\n );\n } catch (error) {}\n console.log(balances, balancesDict, \"balances\");\n return {\n ...balances,\n [ASSETS_DICT.SiO2.symbol]: normalizeBN(\n rewardBalance.toString(),\n rewardToken.decimals\n ),\n };\n};\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFooterPeck(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"112px\",\n height: \"24px\",\n viewBox: \"0 0 112 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"PeckShield\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"\\\\u9875\\\\u9762-1\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Jobs\",\n transform: \"translate(-915.000000, -757.000000)\",\n fill: \"#FFFFFF\",\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"PeckShield\",\n transform: \"translate(915.000000, 757.000000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0,3.66450421 C0.491887071,2.96072114 1.21357466,2.74315379 2.01882609,2.52274861 C3.1849213,2.20585704 4.27315023,1.63166843 5.42690079,1.2400472 C6.7353037,0.778603473 8.06607739,0.382702923 9.41422475,0.0538321805 C9.94884332,-0.0700866134 10.5926646,0.0358592257 11.1310815,0.209913104 C13.185992,0.872074598 15.214314,1.60896575 17.2597286,2.30896504 C17.6443121,2.44139734 18.0412403,2.54166751 18.4362693,2.64288362 C19.0288128,2.79518077 19.5320949,3.06855887 19.7656938,3.66450421 C19.8150724,3.78842301 19.7846856,4.04288221 19.6963738,4.10531458 C19.0677459,4.54801683 18.4144287,4.95666507 17.7250271,5.405043 L17.1600217,3.9123418 C16.4098465,4.53098983 15.6682175,5.04747579 15.0471863,5.6784211 C14.2314894,6.5089608 13.4993564,7.42368961 12.7529795,8.31949952 C12.5849022,8.52193174 12.4605061,8.60990463 12.2050666,8.48976961 C11.4909758,8.15585103 10.746498,7.88058104 10.0551973,7.50504088 C8.79034481,6.81544698 7.2548595,7.16828446 6.6366771,8.59760734 C6.5417182,8.82841792 6.27868207,9.03179609 6.0441336,9.15760678 C5.32149642,9.54449828 4.57132115,9.8812547 3.83918808,10.2530111 C3.68630426,10.3305786 3.56665606,10.4753082 3.43086484,10.5888216 C3.3075069,10.5782692 3.18613602,10.5512246 3.07002104,10.5084162 C2.50026768,10.2085517 2.02547321,10.2653084 1.58486394,10.6919296 C1.31992863,10.9463888 1.34176917,11.2216587 1.52598943,11.4959828 C1.71020968,11.7703068 1.97609458,11.7797663 2.22963483,11.6189556 C2.46011272,11.4581303 2.67875854,11.281103 2.88390161,11.0892265 C3.0738194,10.9265239 3.24379582,10.7496322 3.42326813,10.580308 C4.09367792,10.358011 4.76218853,10.1309842 5.43544709,9.91814655 C5.78109746,9.8077863 6.12928007,9.71003865 6.47999492,9.6249036 C7.27954881,9.43571461 7.94805942,9.84436284 8.22249063,10.6134161 C8.50736731,11.4108477 8.78464728,12.2215226 9.17207957,12.9678732 C9.72189156,14.0301694 10.7521956,14.4492231 11.8546683,14.7282768 C12.1611228,14.8017506 12.4583119,14.9093181 12.7406348,15.0489522 C13.4480786,15.4112491 13.5819706,15.9220594 13.1755465,16.6097614 C13.0805876,16.7639505 12.9856287,16.9124638 12.8365433,17.1375987 C12.9998726,17.1092204 13.0815372,17.114896 13.1413613,17.080842 C14.0225799,16.5908425 14.9085463,16.1084106 15.7755211,15.5947624 C16.1857435,15.3516546 16.3519215,15.0063847 16.0983813,14.5173311 C15.7603276,13.8646291 15.4688038,13.1873324 15.1354981,12.4750359 C16.7830349,12.1912524 18.3641005,11.6189556 19.6821299,10.4724703 L19.7979798,10.5349027 C19.7030209,11.4165234 19.5985661,12.2971982 19.5320949,13.1835487 C19.3858582,15.1076008 18.231158,16.4782751 16.93307,17.7117873 C14.7385699,19.7928663 12.4643044,21.7982697 10.2280225,23.839619 C10.0200625,24.028808 9.86717867,24.0666458 9.62503349,23.8661055 C7.2804984,21.9184047 4.95780385,19.9470554 2.87155695,17.717463 C2.41765344,17.2161122 1.99413677,16.686383 1.56207381,16.1661132 C0.802402654,15.2570601 0.510878849,14.1692233 0.401676121,13.023684 C0.292473393,11.8781446 0.211758333,10.7023349 0.112051495,9.54166044 C0.0886386836,9.43917755 0.0509212528,9.34046962 0,9.2484175 L0,3.66450421 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.1370246,12.036616 L70.56252,12.036616 C68.5379849,12.0261407 66.5134498,12.0128085 64.4851164,12.0070946 C64.2087844,12.0070946 63.9998737,12.0070946 64.0103192,11.6185556 C64.0426054,9.74633066 64.0511518,7.87315343 64.0710932,5.99997619 C64.0805408,5.90366001 64.097045,5.80817186 64.1204722,5.71428571 L74.6666667,5.71428571 C74.4890925,6.15234445 74.3703932,6.54754961 74.1681296,6.89323509 C74.0864645,7.03227112 73.8196285,7.13035818 73.6373064,7.13035818 C71.6593015,7.13035818 69.6822461,7.11226445 67.7051907,7.09893223 C67.5152718,7.09893223 67.3329497,7.09893223 67.0651641,7.09893223 C67.0651641,8.20931589 67.0556682,9.26827526 67.084156,10.3262823 C67.084156,10.4100849 67.3443449,10.5538824 67.4858344,10.5567393 C68.8931332,10.587213 70.3013816,10.5957837 71.7086804,10.606259 C72.4370192,10.6119728 73.1644085,10.6129251 73.8927473,10.606259 C74.1453394,10.606259 74.2649883,10.6833954 74.2602403,10.9624198 C74.2203573,12.97749 74.1918695,14.9916078 74.1576841,17.006678 C74.1503162,17.0536093 74.13691,17.0993841 74.1178011,17.1428571 L63.9267549,17.1428571 C63.9267549,16.6924185 63.9001663,16.2991179 63.9466964,15.9153404 C63.9580915,15.8201102 64.2125828,15.6953587 64.3559715,15.6934541 C65.558158,15.6810742 66.7603444,15.6934541 67.96443,15.7010725 C68.8978812,15.7010725 69.8313324,15.7172617 70.763834,15.7010725 C70.8891805,15.7010725 71.1170831,15.5534658 71.1189823,15.4706155 C71.1370246,14.3459474 71.1370246,13.2231838 71.1370246,12.036616 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.3493284,5.71428571 L32.7841675,5.71428571 C32.794618,5.85565741 32.8098186,5.96192338 32.8079185,6.06724054 C32.7898678,8.09008919 32.7566164,10.1129378 32.7594665,12.1395817 C32.7594665,12.5779288 32.60271,12.6585771 32.2065437,12.6528843 C30.3881687,12.6291642 28.5688437,12.6452939 26.7495187,12.6196762 C26.3524023,12.6149322 26.2364975,12.7382766 26.2431478,13.1272859 C26.2640486,14.4214537 26.2507481,15.7165702 26.2507481,17.1037206 C25.6626738,17.1037206 25.133502,17.1094134 24.6043302,17.1037206 C24.164462,17.097079 23.5355361,17.2412971 23.3350778,17.0145331 C23.1023182,16.7507658 23.2220232,16.1606101 23.2277234,15.7042357 C23.2625582,12.5447207 23.3030932,9.38488944 23.3493284,6.22474189 C23.3512285,6.06154772 23.3493284,5.90499518 23.3493284,5.71428571 Z M29.7278915,7.18967485 C28.6533972,7.18967485 27.5979036,7.18303323 26.5424101,7.20485571 C26.4702071,7.20485571 26.3438519,7.42213166 26.3400518,7.54073208 C26.3106006,8.61477742 26.3115506,9.68882276 26.2811493,10.7666633 C26.272599,11.0977957 26.417955,11.1661095 26.7067669,11.1604167 C27.4183462,11.1480822 28.1318257,11.1604167 28.8415049,11.1556727 C29.8523466,11.1461846 29.7088907,11.2856587 29.7240913,10.271388 C29.739292,9.25711726 29.7278915,8.25328336 29.7278915,7.18967485 Z\",\n id: \"\\\\u5F62\\\\u72B6\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M103.515152,17.6187297 L103.515152,9.68016751 L109.157169,9.68016751 C109.157169,8.67307177 109.172844,7.73027886 109.149793,6.78843159 C109.140572,6.39599522 109.263205,6.26549831 109.648621,6.28819342 C110.294056,6.32601861 110.93949,6.32034484 111.584924,6.31750795 C111.861539,6.31750795 112.005379,6.3827564 111.999846,6.71467246 C111.938376,10.2595234 111.883053,13.8043743 111.833877,17.3492252 C111.833877,17.6064365 111.755503,17.7161295 111.490875,17.7142623 C108.879632,17.6896519 106.26839,17.6745218 103.653459,17.6546636 C103.606186,17.6480577 103.55979,17.6360035 103.515152,17.6187297 Z M109.047445,11.0834821 C108.210225,11.0834821 107.387757,11.0749715 106.557913,11.0986122 C106.481383,11.0986122 106.34953,11.308542 106.346764,11.4239089 C106.311726,12.9198952 106.298817,14.4168272 106.269312,15.9128135 C106.26378,16.182318 106.367049,16.2749897 106.61969,16.2749897 C107.310305,16.2749897 108.002764,16.2863373 108.692457,16.3071411 C108.954318,16.3156518 109.046523,16.2031219 109.046523,15.9459106 C109.043757,14.3600894 109.045601,12.7657575 109.045601,11.0834821 L109.047445,11.0834821 Z\",\n id: \"\\\\u5F62\\\\u72B6\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M53.8848716,5.71428571 L56.6204529,5.71428571 L56.6204529,11.7746585 C56.7716153,11.6538287 56.8678096,11.5915258 56.9484295,11.5122312 C57.6758413,10.7938599 58.3986724,10.0707687 59.1288326,9.3561733 C59.2351044,9.25233514 59.3725247,9.11356959 59.4952869,9.11073764 C60.5570882,9.09091399 61.6198057,9.09940984 62.7878788,9.09940984 C62.6458777,9.28820651 62.5835805,9.38260484 62.5047928,9.46284342 C61.6317155,10.3652915 60.7641349,11.2715154 59.8773155,12.1598037 C59.6473654,12.3901356 59.6198814,12.5506128 59.813186,12.8319198 C60.6935925,14.1157371 61.5492633,15.4174901 62.4131793,16.7135792 C62.4800572,16.8145854 62.5386899,16.9203115 62.6550391,17.1119401 C61.9056401,17.1119401 61.2212867,17.0496372 60.5534237,17.1279879 C59.7976117,17.2157783 59.3624472,16.9127597 58.9675927,16.273683 C58.3134718,15.2135897 57.5695696,14.2129674 56.8604805,13.1887455 C56.8027639,13.105675 56.7267247,13.0367642 56.5627364,12.8536314 L56.5627364,17.0468053 L53.7373737,17.0468053 C53.7859289,13.2850318 53.8354003,9.5260903 53.8848716,5.71428571 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M78.7540255,5.71428571 L78.7540255,9.09974065 C79.0897183,9.09974065 79.3955718,9.09974065 79.7014252,9.09974065 C81.0833606,9.10638252 82.4662284,9.11681974 83.8481638,9.11681974 C84.1111232,9.11681974 84.2882944,9.13674534 84.2826995,9.48876434 C84.2454003,11.9557438 84.2239532,14.4227233 84.1959788,16.8897028 C84.1877597,16.9741611 84.1734227,17.0578865 84.1530848,17.1401961 C83.2849459,17.1401961 82.4345241,17.1534799 81.5850348,17.1202705 C81.4992467,17.1202705 81.3537798,16.835619 81.3537798,16.6781119 C81.3603071,14.8610866 81.3929439,13.0431125 81.4106611,11.2260872 C81.4181209,10.4556305 81.5039091,10.5296399 80.7075711,10.5163562 C80.1947071,10.5078166 79.6818431,10.5248957 79.1708441,10.4926352 C78.803447,10.4689143 78.686887,10.5932121 78.6859545,10.9670544 C78.6859545,12.8476518 78.6439929,14.7282493 78.6439929,16.6097955 C78.6439929,17.0206425 78.5386227,17.1686613 78.1190067,17.1392473 C77.4662707,17.0946519 76.8135346,17.1031914 76.1607986,17.1003449 C75.9146239,17.1003449 75.794334,17.0253867 75.7979798,16.7464282 C75.8484178,13.1117451 75.8953527,9.47674572 75.9388684,5.84143004 C75.9484195,5.79741532 75.9631339,5.75472789 75.982695,5.71428571 L78.7540255,5.71428571 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.1187802,9.14285714 C42.1187802,10.7574257 42.1187802,12.284925 42.1187802,13.8124242 C42.1187802,14.1323094 41.9005929,14.096346 41.7051335,14.096346 C40.2205507,14.0878283 38.7368771,14.096346 37.2504762,14.0575433 C36.8250109,14.0471329 36.6850074,14.1834153 36.7231902,14.6149764 C36.7550092,14.9727179 36.729554,15.3361378 36.729554,15.756342 L42.4242424,15.756342 C42.2178736,16.229545 42.0605969,16.6355532 41.8678648,17.015062 C41.8233182,17.1011849 41.6342226,17.1437732 41.5124014,17.1428422 C39.1041591,17.1314699 36.6940986,17.1078098 34.2885836,17.0945601 C34.0422138,17.0945601 33.9358475,17.015062 33.939484,16.7415506 C33.9746364,14.2493483 34.0049402,11.7571459 34.0303953,9.26494351 C34.0384955,9.22295198 34.0509948,9.18201181 34.067669,9.14285714 L42.1187802,9.14285714 Z M39.3823479,10.5776086 C38.5595999,10.5776086 37.7904897,10.5709837 37.0186522,10.5870726 C36.9341046,10.5870726 36.7841008,10.7186231 36.7813735,10.7933891 C36.761373,11.3839465 36.7704641,11.9763966 36.7704641,12.6171134 C37.5886665,12.6171134 38.3577767,12.6256311 39.1259778,12.6057566 C39.2427313,12.5720671 39.3340898,12.47732 39.3668929,12.3559054 C39.3932572,11.790901 39.3823479,11.2249503 39.3823479,10.5776086 L39.3823479,10.5776086 Z\",\n id: \"\\\\u5F62\\\\u72B6\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M92.1959998,15.7658052 L97.8585859,15.7658052 C97.6477836,16.2443284 97.4896818,16.6407381 97.2970521,17.0173274 C97.2561638,17.0966093 97.0898843,17.1428571 96.9817573,17.1428571 C94.4981669,17.1334188 92.0163938,17.1186321 89.5364379,17.098497 C89.4904409,17.088566 89.4456447,17.073372 89.4028692,17.053193 C89.3937829,16.9399331 89.3728844,16.8059089 89.3737643,16.67566 C89.4010519,14.3160782 89.4337626,11.9564964 89.4555698,9.59691467 C89.4555698,9.29771971 89.509179,9.14009964 89.8526414,9.14289365 C92.3195735,9.16558313 94.7865057,9.16841463 97.2534379,9.18068445 C97.3536366,9.18736733 97.4532395,9.20156177 97.5514687,9.22315692 C97.5514687,10.7700987 97.5514687,12.291557 97.5514687,13.8130154 C97.5514687,14.1405253 97.3297628,14.091446 97.1389504,14.091446 C95.6851414,14.0870415 94.2313324,14.0807492 92.7775234,14.0725694 L92.1959998,14.0725694 L92.1959998,15.7658052 Z M94.8064956,10.5803884 C93.988728,10.5803884 93.2327473,10.57095 92.4813098,10.593602 C92.3904467,10.593602 92.2287105,10.7663234 92.2205328,10.8692012 C92.1843489,11.3536873 92.1749443,11.8399302 92.1923652,12.325535 C92.1923652,12.427469 92.350467,12.6086848 92.44133,12.6086848 C93.1343123,12.6426628 93.8285061,12.6527304 94.5239114,12.6388875 C94.6147745,12.6388875 94.7901402,12.4737168 94.7965006,12.3783897 C94.8192164,11.8026517 94.8064956,11.2250261 94.8064956,10.5803884 Z\",\n id: \"\\\\u5F62\\\\u72B6\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M47.0266559,15.7531656 L52.510494,15.7531656 C52.3146761,16.2075463 52.1628938,16.5949954 51.9792559,16.9654759 C51.9125554,17.0643127 51.8044478,17.1268661 51.6859976,17.1351616 C49.190959,17.1445886 46.6949835,17.1427032 44.1549724,17.1427032 C44.1409185,16.9541635 44.120306,16.8174722 44.1212121,16.6845517 C44.1427923,14.3589144 44.1765217,12.033277 44.1821433,9.70858238 C44.1821433,9.29002422 44.2823945,9.13824976 44.7283721,9.14296325 C47.1953029,9.1759577 49.6622336,9.1769004 52.1301013,9.19009818 C52.2678297,9.19009818 52.406495,9.20329596 52.6060606,9.21460834 C52.4542783,9.62751031 52.3437208,10.0177875 52.1638307,10.3712995 C52.1038673,10.4891368 51.8668246,10.5739797 51.7103577,10.5749224 C50.3518125,10.5834066 48.9932672,10.5692662 47.6356589,10.5626673 C47.4482734,10.5626673 47.2674463,10.5626673 47.0275928,10.5626673 L47.0266559,15.7531656 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99.5555556,17.7001323 C99.6008127,13.867173 99.6425886,10.0977958 99.6895864,6.28571429 L102.381518,6.28571429 C102.381518,7.04490404 102.386739,7.7670833 102.381518,8.48831356 C102.354537,11.3637448 102.312761,14.238227 102.304928,17.1136582 C102.304928,17.6004886 102.170027,17.7361938 101.735733,17.7115201 C101.042079,17.6716626 100.346686,17.7001323 99.5555556,17.7001323 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n id: \"\\\\u8DEF\\\\u5F84\",\n points: \"85.4141414 17.1380981 85.4141414 9.14285714 88.2424242 9.14285714 88.2424242 17.1428571\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M85.4168088,7.99733755 C85.4168088,7.27847575 85.4056899,6.63061264 85.4288544,5.9845245 C85.4685996,5.85906465 85.5740928,5.76273773 85.7068279,5.73070416 C86.462298,5.7088129 87.2174593,5.7088129 87.9723118,5.73070416 C88.0649696,5.73070416 88.2252677,5.89400116 88.2280474,5.98629947 C88.2502853,6.64747483 88.2400929,7.31042516 88.2400929,8 L85.4168088,7.99733755 Z\",\n id: \"\\\\u8DEF\\\\u5F84\"\n }))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFooterPeck);\nexport default __webpack_public_path__ + \"static/media/footer-peck.cf9d4f566efeef80f9d2fd09fa2d80f2.svg\";\nexport { ForwardRef as ReactComponent };","import { useModalContext } from \"@/hook/app/useModalContext\";\nimport { useWallet } from \"@/hook/useWallet\";\nimport { DEFAULT_CHAIN_ID } from \"@/utils/env\";\nimport { Button } from \"antd\";\nimport { useState } from \"react\";\nimport \"./index.less\";\nimport { t } from \"@lingui/macro\";\nconst MissConnectWallet: React.FC<{ style?: React.CSSProperties }> = ({\n style,\n}) => {\n const [loading, setLoading] = useState(false);\n\n const { openMessage, setMessageVisible } = useModalContext();\n const { switchChain } = useWallet();\n\n const handleUnSupportChain = () => {\n setLoading(true);\n openMessage({\n type: \"warning\",\n title: t`You need to change to a supported chain`,\n message: t`Please switch the chain with your wallet.`,\n });\n if (switchChain) {\n switchChain(DEFAULT_CHAIN_ID).then(({ error }) => {\n setLoading(false);\n if (!error) {\n setMessageVisible(false);\n\n return;\n }\n openMessage({\n title: t`Failed to switch the chain`,\n message: error,\n type: \"error\",\n });\n });\n }\n };\n return (\n
\n
\n \"\"\n
\n

\n {process.env.REACT_APP_ENV === \"dev\"\n ? t`In local-dev mode, only localhost:8545 network can be connected`\n : t`SiO2 Finance is not yet depolyed to this network`}\n

\n

\n {t`Please switch to`}{\" \"}\n {process.env.REACT_APP_ENV === \"dev\"\n ? \"Localhost:8545\"\n : process.env.REACT_APP_ENV === \"shibuya\"\n ? \"Shibuya\"\n : \"Astar\"}{\" \"}\n

\n \n {t`Change Network`}\n \n
\n );\n};\nexport default MissConnectWallet;\n","import { useWallet } from \"@/hook/useWallet\";\nimport { Button } from \"antd\";\nimport { useState } from \"react\";\nimport \"./index.less\";\nimport { t } from \"@lingui/macro\";\nconst MissConnectWallet: React.FC<{ style?: React.CSSProperties }> = ({\n style,\n}) => {\n const [loading, setLoading] = useState(false);\n const { connect } = useWallet();\n const connectWallet = async () => {\n try {\n setLoading(true);\n await connect(\"Metamask\").catch(() => {});\n setLoading(false);\n } catch (e) {\n console.log(\"error on activation\", e);\n // disconnectWallet();\n }\n };\n return (\n
\n
\n \"\"\n
\n

{t`Please, connect your wallet`}

\n

\n {t`Please connect your wallet to see your supplies, borrowings, and open positions.`}\n

\n \n {t`Connect Wallet`}\n \n
\n );\n};\nexport default MissConnectWallet;\n","var _path, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFooterAstar(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 75.099,\n height: 24,\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#ffffff\"\n }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.972 11.186a12 12 0 0 0-20.99-7.1h-.006l-.04.056a11.961 11.961 0 0 0-2.908 8.677c.021.314.058.623.1.929l.006.041q.045.3.105.6v.011q.055.27.121.534a12 12 0 0 0 23.606-3.745zm-2.612.178a9.357 9.357 0 0 1-.141 2.378l-.005-.013a9.49 9.49 0 0 0-4.1-4.51c.306-3.6-.916-5.121-2.3-5.368-.038-.007-.075-.014-.114-.018a2 2 0 1 0-.225 3.99c.006.122.01.251.011.386a10.739 10.739 0 0 0-3.565-.281 10.468 10.468 0 0 0-1.222.154A6.6 6.6 0 0 1 11.177 4.5a4.108 4.108 0 0 1 3.518-1.378 3.781 3.781 0 0 1 .8.176l.035.011a9.392 9.392 0 0 1 5.83 8.054zm-8.364 1.833a8.543 8.543 0 0 1-1.027 1.214 8.953 8.953 0 0 1-1.446-2.035c-.019-.038-.039-.074-.057-.113a8.529 8.529 0 0 1-.538-1.5 8.959 8.959 0 0 1 2.487-.236.76.76 0 0 1 .126.007 8.531 8.531 0 0 1 1.563.282 8.958 8.958 0 0 1-1.04 2.271c-.025.039-.044.074-.068.109zm-4.1-10.048-.007.009a9.491 9.491 0 0 0-1.854 5.806c-3.273 1.536-3.977 3.354-3.5 4.675.013.036.026.072.041.108a2 2 0 1 0 3.568-1.8q.155-.1.332-.2a10.766 10.766 0 0 0 1.535 3.233 10.385 10.385 0 0 0 .743.979 6.6 6.6 0 0 1-3.842.511 4.109 4.109 0 0 1-2.952-2.358 3.8 3.8 0 0 1-.246-.779 9.233 9.233 0 0 1-.076-.693 9.4 9.4 0 0 1 6.258-9.491zm3.743 18.211a9.349 9.349 0 0 1-6.742-2.245 9.489 9.489 0 0 0 5.955-1.3c2.968 2.068 4.895 1.769 5.8.694q.038-.043.073-.09a2 2 0 1 0-3.343-2.19 9.251 9.251 0 0 1-.341-.184 10.738 10.738 0 0 0 2.028-2.949 10.41 10.41 0 0 0 .477-1.135 6.6 6.6 0 0 1 2.365 3.073 4.109 4.109 0 0 1-.565 3.736 3.787 3.787 0 0 1-.551.6l-.009.008a9.328 9.328 0 0 1-5.147 1.982z\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.809 3.85c-.038-.007-.075-.014-.114-.018a2 2 0 0 0-.569.009c1.148.625 1.985 2.365 1.545 5.8a10.231 10.231 0 0 1-.972 3.211 10.684 10.684 0 0 1-1.657 2.543 9.456 9.456 0 0 0 1 .655 10.738 10.738 0 0 0 2.028-2.949 10.225 10.225 0 0 0 .972-3.211c.52-4.09-.77-5.779-2.233-6.04z\",\n opacity: 0.9,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.671 9.638c.44-3.432-.4-5.172-1.545-5.8-.045.007-.089.017-.133.027 1.124.646 1.933 2.385 1.5 5.77a10.227 10.227 0 0 1-.972 3.211 10.676 10.676 0 0 1-1.587 2.461l.109.083a10.683 10.683 0 0 0 1.652-2.541 10.232 10.232 0 0 0 .976-3.211z\",\n opacity: 0.8,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.308 17.423a8.73 8.73 0 0 1-.315-.254 10.7 10.7 0 0 1-6.374.609 9.443 9.443 0 0 0 1.276 1.338 9.489 9.489 0 0 0 5.955-1.3 10.516 10.516 0 0 1-.542-.393z\",\n opacity: 0.5,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10.993 17.168c-.052-.043-.1-.085-.155-.129a10.7 10.7 0 0 1-6.393.51q.085.116.173.228a10.7 10.7 0 0 0 6.375-.609z\",\n opacity: 0.6,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.537 13.642c.013.036.026.072.041.108a2 2 0 0 0 .293.488c-.033-1.306 1.055-2.9 4.248-4.236a10.23 10.23 0 0 1 3.267-.764 10.685 10.685 0 0 1 3.031.163 9.375 9.375 0 0 0 .069-1.19 10.739 10.739 0 0 0-3.568-.282 10.222 10.222 0 0 0-3.267.764c-3.802 1.591-4.621 3.549-4.114 4.949z\",\n opacity: 0.9,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.118 10.002c-3.192 1.335-4.281 2.93-4.248 4.236.029.035.059.069.09.1 0-1.3 1.1-2.866 4.248-4.183a10.224 10.224 0 0 1 3.267-.764 10.672 10.672 0 0 1 2.925.144l.017-.136a10.685 10.685 0 0 0-3.031-.163 10.23 10.23 0 0 0-3.268.766z\",\n opacity: 0.8,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.04 9.888c-.017.135-.04.267-.062.4a10.7 10.7 0 0 1 3.714 5.216 9.422 9.422 0 0 0 .521-1.774 9.491 9.491 0 0 0-4.1-4.508c-.019.215-.042.436-.073.666z\",\n opacity: 0.4,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.975 10.289a6.976 6.976 0 0 1-.035.2 10.7 10.7 0 0 1 3.638 5.281q.058-.132.111-.264a10.7 10.7 0 0 0-3.714-5.217z\",\n opacity: 0.5,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17.651 18.509c.025-.029.049-.059.073-.09a2 2 0 0 0 .277-.5c-1.115.682-3.04.537-5.793-1.56a10.222 10.222 0 0 1-2.3-2.447 10.686 10.686 0 0 1-1.374-2.707 9.362 9.362 0 0 0-1.065.536 10.738 10.738 0 0 0 1.54 3.231 10.221 10.221 0 0 0 2.3 2.447c3.277 2.499 5.383 2.229 6.342 1.09z\",\n opacity: 0.9,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12.208 16.361c2.753 2.1 4.678 2.242 5.793 1.56.016-.042.03-.085.043-.128-1.121.65-3.031.481-5.746-1.587a10.23 10.23 0 0 1-2.3-2.447 10.674 10.674 0 0 1-1.337-2.6l-.126.053a10.686 10.686 0 0 0 1.374 2.707 10.222 10.222 0 0 0 2.299 2.442z\",\n opacity: 0.8,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.648 8.69c.125-.052.251-.1.378-.146a10.7 10.7 0 0 1 2.66-5.825 9.446 9.446 0 0 0-1.8.436 9.491 9.491 0 0 0-1.853 5.807c.198-.092.401-.183.615-.272z\",\n opacity: 0.3,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.026 8.544c.063-.023.126-.047.19-.069a10.7 10.7 0 0 1 2.755-5.791q-.142.016-.284.036a10.7 10.7 0 0 0-2.661 5.824z\",\n opacity: 0.4,\n style: {\n mixBlendMode: \"overlay\",\n isolation: \"isolate\"\n }\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.186.03a11.961 11.961 0 0 0-8.2 4.057l-.046.052a18.222 18.222 0 0 0 2.2 1.479A9.385 9.385 0 0 1 8.902 3.15c.1-.131.207-.26.319-.386A6.94 6.94 0 0 1 14.575.426c.239 0 .726.038.736.039A11.948 11.948 0 0 0 11.186.03zm1.451 21.328a9.349 9.349 0 0 1-6.742-2.245 6.861 6.861 0 0 1-.5-.085 6.94 6.94 0 0 1-4.7-3.467 7.07 7.07 0 0 1-.323-.632 12 12 0 0 0 12.449 9.041c.02-.604-.159-2.012-.184-2.612zm11.335-10.172a21.6 21.6 0 0 0-2.612.178 9.357 9.357 0 0 1-.141 2.378c.062.153.121.307.174.466a6.94 6.94 0 0 1-.652 5.805q-.176.3-.378.585l-.008.011.009-.008a11.966 11.966 0 0 0 3.608-9.415z\",\n opacity: 0.4,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.692 3.121a3.781 3.781 0 0 1 .8.176l.035.011a9.428 9.428 0 0 1 2.8 1.77h.005a6.88 6.88 0 0 1 1.152-.945 6.284 6.284 0 0 0-2.937-1.556 5.137 5.137 0 0 0-5.815 2.5l.017-.016a5.057 5.057 0 0 1 .427-.567 4.108 4.108 0 0 1 3.516-1.373zm3.652 15.65a3.787 3.787 0 0 1-.551.6l-.027.025a9.435 9.435 0 0 1-2.933 1.538h-.006a6.884 6.884 0 0 1 .242 1.47 6.284 6.284 0 0 0 2.816-1.765 5.137 5.137 0 0 0 .742-6.286l.005.023a5.038 5.038 0 0 1 .278.654 4.109 4.109 0 0 1-.566 3.741zM2.97 14.111a3.8 3.8 0 0 1-.246-.779c0-.012-.006-.024-.008-.036a9.433 9.433 0 0 1 .134-3.309V9.98a6.886 6.886 0 0 1-1.394-.525 6.286 6.286 0 0 0 .121 3.321 5.137 5.137 0 0 0 5.073 3.785l-.023-.007a5.048 5.048 0 0 1-.7-.086 4.109 4.109 0 0 1-2.957-2.357z\",\n opacity: 0.5,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.187 7.804a2.013 2.013 0 0 0 .284.014 14.129 14.129 0 0 0-.216-1.887 2.668 2.668 0 0 0-.627-1.3c-.178-.172-.739-.386-1.175.933a2 2 0 0 0 1.734 2.24z\",\n opacity: 0.6,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.276 12.198a2.016 2.016 0 0 0-.13-.253 14.149 14.149 0 0 0-1.526 1.13 2.669 2.669 0 0 0-.815 1.195c-.06.24.035.833 1.4.551a2 2 0 0 0 1.071-2.623z\",\n opacity: 0.5,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.536 15.989a1.988 1.988 0 0 0-.154.239 14.159 14.159 0 0 0 1.742.756 2.667 2.667 0 0 0 1.442.108c.238-.068.7-.447-.22-1.484a2 2 0 0 0-2.81.381z\",\n opacity: 0.6,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n })), /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.105 10.819a8.958 8.958 0 0 1-1.04 2.271l-.069.106a8.543 8.543 0 0 1-1.027 1.214 9.623 9.623 0 0 0 .9.844 9.318 9.318 0 0 0 1.174.789 10.738 10.738 0 0 0 2.028-2.949 10.407 10.407 0 0 0 .477-1.135 6.337 6.337 0 0 0-1.244-.726 9.4 9.4 0 0 0-1.199-.414zm-8.21 8.296a9.49 9.49 0 0 0 5.955-1.3 15.24 15.24 0 0 1-.542-.395 10.106 10.106 0 0 1-1.552-1.469 6.6 6.6 0 0 1-3.842.511 4.109 4.109 0 0 1-2.952-2.358 3.8 3.8 0 0 1-.246-.779 9.354 9.354 0 0 0 3.179 5.79zm6.072-4.702a8.954 8.954 0 0 1-1.446-2.035c-.019-.038-.039-.074-.057-.113a8.529 8.529 0 0 1-.538-1.5 9.592 9.592 0 0 0-1.177.355 9.319 9.319 0 0 0-1.268.621 10.766 10.766 0 0 0 1.535 3.233 10.383 10.383 0 0 0 .743.979 6.34 6.34 0 0 0 1.253-.715 9.456 9.456 0 0 0 .955-.825zM8.889 3.157a9.491 9.491 0 0 0-1.854 5.806c.2-.092.4-.183.615-.273a10.11 10.11 0 0 1 2.045-.61 6.6 6.6 0 0 1 1.478-3.582 4.108 4.108 0 0 1 3.518-1.378 3.781 3.781 0 0 1 .8.176l.035.011a9.355 9.355 0 0 0-6.629-.159l-.007.009zm12.325 10.571a9.49 9.49 0 0 0-4.1-4.51c-.018.216-.041.438-.071.669a10.111 10.111 0 0 1-.495 2.076 6.6 6.6 0 0 1 2.365 3.073 4.109 4.109 0 0 1-.565 3.736 3.787 3.787 0 0 1-.551.6l-.009.008a9.414 9.414 0 0 0 3.435-5.641l-.005-.013z\",\n opacity: 0.3,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9.689 9.524a9.411 9.411 0 0 0 .235 1.241 8.959 8.959 0 0 1 2.487-.236.76.76 0 0 1 .126.007 8.532 8.532 0 0 1 1.563.282 9.6 9.6 0 0 0 .281-1.2 9.286 9.286 0 0 0 .1-1.413 10.739 10.739 0 0 0-3.564-.281 10.469 10.469 0 0 0-1.222.154 6.336 6.336 0 0 0-.006 1.446z\",\n opacity: 0.3,\n style: {\n mixBlendMode: \"multiply\",\n isolation: \"isolate\"\n }\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#ffffff\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m60.172 8.912-1.544 4.3h.012l1.541-4.275zm-27.413 0-1.544 4.3 1.545-4.284zm.386 1.074 1.158 3.226h-2.321l-.586 1.626h3.5l.992 2.756h2.219L34.065 7.446z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m31.215 13.212 1.544-4.3.006.016.652-1.808h-1.705l-4.167 10.475h2.091l1.58-4.383zm13.617-1.013a9.559 9.559 0 0 0-2.012-.834 8.865 8.865 0 0 1-1.123-.434 1.332 1.332 0 0 1-.565-.454 1.112 1.112 0 0 1-.159-.6 1.079 1.079 0 0 1 .469-.937 2.242 2.242 0 0 1 1.309-.331 5.424 5.424 0 0 1 1.44.207 5.071 5.071 0 0 1 1.33.565l.289-1.695a5.247 5.247 0 0 0-1.44-.572 6.872 6.872 0 0 0-1.688-.214 4.868 4.868 0 0 0-1.985.372 2.97 2.97 0 0 0-1.3 1.061 2.852 2.852 0 0 0-.462 1.626 2.923 2.923 0 0 0 .31 1.385 2.675 2.675 0 0 0 1.013 1.013 8.058 8.058 0 0 0 1.847.772 9.042 9.042 0 0 1 1.282.469 1.559 1.559 0 0 1 .634.489 1.131 1.131 0 0 1 .179.641 1.163 1.163 0 0 1-.531 1.013 2.561 2.561 0 0 1-1.468.365 6.158 6.158 0 0 1-1.7-.255 6.4 6.4 0 0 1-1.551-.655l-.193 1.75a3.922 3.922 0 0 0 .965.455 8.08 8.08 0 0 0 1.247.3 8.178 8.178 0 0 0 1.33.11 4.561 4.561 0 0 0 2.922-.848 2.84 2.84 0 0 0 1.061-2.35 2.685 2.685 0 0 0-.345-1.385 3.02 3.02 0 0 0-1.105-1.029zm2.137-5.079h8.862v1.708h-8.862zm3.377 2.424h2.109v8.051h-2.109zm8.283 3.668 1.544-4.3.009.026.655-1.817h-1.712l-4.162 10.475h2.1l.992-2.756.586-1.626zm1.932-3.217 1.155 3.217h-2.315l-.586 1.626h3.494l.993 2.756h2.219l-4.043-10.14zm11.781 3.355a3.582 3.582 0 0 0 1.24-1.151 2.97 2.97 0 0 0 .483-1.688 3.365 3.365 0 0 0-.469-1.805 3.087 3.087 0 0 0-1.337-1.172 4.768 4.768 0 0 0-2.067-.414h-.732v1.585h.457q2.1 0 2.095 1.792t-2.164 1.792h-.388v1.585h1.077l2.205 3.721h2.357zm-5.595-6.23h1.997v10.475h-1.997z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFooterAstar);\nexport default __webpack_public_path__ + \"static/media/footer-astar.1da24af61c1cd2da1a833612609b382c.svg\";\nexport { ForwardRef as ReactComponent };","import \"./index.less\";\nimport { ReactComponent as ImgPeck } from \"@img/footer-peck.svg\";\nimport { ReactComponent as ImgAstar } from \"@img/footer-astar.svg\";\nimport { useAppSetting } from \"@/hook/app/useAppSetting\";\nimport { t } from \"@lingui/macro\";\nconst Footer: React.FC = () => {\n const { settingData } = useAppSetting();\n return (\n
\n
\n
\n {t`Audited by`}{\" \"}\n \n {settingData?.theme === \"dark\" ? (\n \n ) : (\n \"12\"\n )}\n \n
\n
\n {t`Powered by`}{\" \"}\n
\n {settingData?.theme === \"dark\" ? (\n \n ) : (\n \"12\"\n )}\n
\n
\n
\n
\n );\n};\nexport default Footer;\n","import \"./App.less\";\nimport { TopHeader } from \"./component\";\nimport { configResponsive } from \"ahooks\";\nimport { ModalContextProvider } from \"./hook/app/useModalContext\";\nimport { Spin } from \"antd\";\nimport React, { useMemo } from \"react\";\nimport { useRoutesArr } from \"@/hook/app/useRoutesArr\";\nimport { useLocation, useSearchParams, useRoutes } from \"react-router-dom\";\nimport { useWallet } from \"./hook/useWallet\";\nimport { isSupportedChain } from \"./libs/config\";\nimport MissNetwork from \"./component/MissConnectWallet/MissNetwork\";\nimport MissConnectWallet from \"./component/MissConnectWallet/MissConnectWallet\";\nimport { I18nProvider } from \"src/libs/i18n-provider\";\nimport { ConfigProvider } from \"antd\";\nimport { useAppSetting } from \"./hook/app/useAppSetting\";\nimport { SECRET_KEY, SECRET_VALUE } from \"./hook/app/useNavigate\";\nimport Footer from \"./component/Footer\";\nimport NotificationBar from \"./component/NotificationBar\";\n\nconfigResponsive({\n xs: 0,\n sm: 576,\n md: 900,\n lg: 1440,\n xl: 1500,\n});\n\nfunction App() {\n let location = useLocation();\n let [searchParams] = useSearchParams();\n let { settingData } = useAppSetting();\n let { routes } = useRoutesArr();\n\n let element = useRoutes(routes);\n const { account, chainId } = useWallet();\n const isUnsupportedChain = useMemo(() => chainId && !isSupportedChain(chainId), [chainId]);\n\n if (window.location.hostname === \"dev.sio2.finance\" && searchParams.get(SECRET_KEY) !== SECRET_VALUE) {\n window.location.href = \"https://google.com\";\n }\n\n const isShowWithoutChain = routes.find((item) => item.path === location.pathname)?.isShowWithoutChain;\n\n const routeConDom = (\n \n
\n \n }\n >\n {element}\n \n );\n ConfigProvider.config({\n theme: {\n primaryColor: \"#f02574\",\n },\n });\n\n const isShowNotification = [\"/\", \"/dashboard\", \"/market\"].includes(location.pathname);\n return (\n \n \n \n
\n \n {/* {isShowNotification ? : null} */}\n
\n
\n {isShowWithoutChain ? (\n routeConDom\n ) : account ? (\n isUnsupportedChain ? (\n \n ) : (\n routeConDom\n )\n ) : (\n \n )}\n
\n
\n
\n
\n
\n
\n
\n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { Web3ReactProvider } from \"@web3-react/core\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport { getLibrary } from \"./libs/wallet-provider\";\n\nconst container = document.getElementById(\"root\")!;\nconst root = createRoot(container);\n\nroot.render(\n \n \n \n \n \n \n \n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","import { EthereumAddress } from \"@/types/web3\";\nimport { ValueOf } from \"type-fest\";\nimport { ChainId, CHAIN_ID } from \"./network\";\n\nexport const CUSTOM_MARKET = {\n proto_astar: \"proto_astar\",\n proto_shibuya: \"proto_shibuya\",\n proto_dev: \"proto_dev\",\n} as const;\nexport type CustomMarket = ValueOf;\n\nexport type MarketDataType = {\n chainId: ChainId;\n enabledFeatures?: {\n liquiditySwap?: boolean;\n staking?: boolean;\n governance?: boolean;\n faucet?: boolean;\n collateralRepay?: boolean;\n incentives?: boolean;\n permissions?: boolean;\n };\n addresses: {\n LENDING_POOL_ADDRESS_PROVIDER: EthereumAddress;\n LENDING_POOL: EthereumAddress;\n INCENTIVES_CONTROLLER: EthereumAddress;\n WETH_GATEWAY?: EthereumAddress;\n SWAP_COLLATERAL_ADAPTER?: EthereumAddress;\n REPAY_WITH_COLLATERAL_ADAPTER?: EthereumAddress;\n FAUCET?: EthereumAddress;\n PERMISSION_MANAGER?: EthereumAddress;\n LEVERAGER?: EthereumAddress;\n LAUNCHPAD?: EthereumAddress;\n };\n};\n\nconst SHIBUYA_CONFIG: MarketDataType = {\n chainId: CHAIN_ID.shibuya,\n enabledFeatures: {\n incentives: true,\n },\n addresses: {\n LENDING_POOL_ADDRESS_PROVIDER:\n \"0xA3e2cc02E3b670Cb921861eD9109D2078705D6aF\",\n INCENTIVES_CONTROLLER: \"0x9dbb6A041349989D7c192CaE073FF8faF7dcAf78\",\n LENDING_POOL: \"0xCEE4Bd92d09AbE83704e12FC867FAC734a9aC8F1\",\n WETH_GATEWAY: \"0xE2D4c936c35f2d762204a26bB38DBb119dDF6C5F\",\n LEVERAGER: \"0x00\",\n },\n};\n\nexport const MARKET_CONFIGS: {\n [key in CustomMarket]: MarketDataType;\n} = {\n [CUSTOM_MARKET.proto_astar]: {\n chainId: CHAIN_ID.astar,\n enabledFeatures: {\n incentives: true,\n },\n addresses: {\n LENDING_POOL_ADDRESS_PROVIDER:\n \"0x2660e0668dd5A18Ed092D5351FfF7B0A403f9721\",\n INCENTIVES_CONTROLLER: \"0xc41e6Da7F6E803514583f3b22b4Ff660CCD39B03\",\n LENDING_POOL: \"0x4df48B292C026f0340B60C582f58aa41E09fF0de\",\n WETH_GATEWAY: \"0x4424045DA06d5F71EcAA730fdAafEEd59b9825B0\",\n LEVERAGER: \"0x00\",\n },\n },\n [CUSTOM_MARKET.proto_shibuya]: SHIBUYA_CONFIG,\n [CUSTOM_MARKET.proto_dev]: { ...SHIBUYA_CONFIG, chainId: CHAIN_ID.dev },\n} as const;\n\nexport const CHAIN_MARKET_CONFIG: {\n [key in ChainId]: MarketDataType;\n} = {\n [CHAIN_ID.astar]: MARKET_CONFIGS.proto_astar,\n [CHAIN_ID.shibuya]: MARKET_CONFIGS.proto_shibuya,\n [CHAIN_ID.dev]: MARKET_CONFIGS.proto_dev,\n} as const;\n","import { Stake } from \"submodule/packages/contract-helpers/dist/cjs\";\nimport { CHAIN_ID, ChainId } from \"./network\";\n\nexport interface StakeConfig {\n chainId: ChainId;\n stakeDataProvider: string;\n tokens: {\n [token: string]: {\n TOKEN_STAKING: string;\n STAKING_REWARD_TOKEN: string;\n STAKING_HELPER?: string;\n };\n };\n queryStakeDataUrl?: string;\n wsStakeDataUrl?: string;\n}\n\nexport const astarStakeConfig: StakeConfig = {\n chainId: CHAIN_ID.astar,\n stakeDataProvider: \"\",\n tokens: {\n [Stake.sio2]: {\n TOKEN_STAKING: \"0xEabE3E7F94F9471A252819F8DC9d1F30c355E902\",\n STAKING_REWARD_TOKEN: \"0xcCA488aEEf7A1D5C633f877453784F025e7cF160\",\n STAKING_HELPER: \"0xcC869E8F7918a5B307685cAe6db80F9151915Cd4\",\n },\n },\n queryStakeDataUrl: \"https://cache-api-1.aave.com/graphql\",\n wsStakeDataUrl: \"wss://cache-api-1.aave.com/graphql\",\n};\n\nexport const shibuyaStakeConfig: StakeConfig = {\n chainId: CHAIN_ID.shibuya,\n // stakeDataProvider: \"0x59df8ACc223622d244de32112d4561A009C25Fe5\",\n stakeDataProvider: \"\",\n tokens: {\n [Stake.sio2]: {\n TOKEN_STAKING: \"0xE73d66ba54c491b98041cb62C791361536d1cB1a\",\n STAKING_REWARD_TOKEN: \"0x76948c31A88496323fEC78B00C68D4b7b612bFE1\",\n STAKING_HELPER: \"0x0CE543f6d8E60E6AAf4d61d5ab5846819b7C8528\",\n },\n },\n queryStakeDataUrl: \"https://cache-api-1.aave.com/graphql\",\n wsStakeDataUrl: \"wss://cache-api-1.aave.com/graphql\",\n};\nexport const devStakeConfig: StakeConfig = {\n ...shibuyaStakeConfig,\n chainId: CHAIN_ID.dev,\n};\n\n// export const getStakeConfig = () => {\n// return shibuyaStakeConfig; // TODO: replace on mainnet\n// };\n\nexport const STAKE_CONFIG: {\n [key in ChainId]: StakeConfig;\n} = {\n [CHAIN_ID.astar]: astarStakeConfig,\n [CHAIN_ID.shibuya]: shibuyaStakeConfig,\n [CHAIN_ID.dev]: devStakeConfig,\n} as const;\n","import { EthereumAddress } from \"@/types/web3\";\n\nexport type FaucetConfig = {\n address:EthereumAddress\n}\n\nexport const faucetConfig:FaucetConfig = {\naddress:\"0x0161fdceD6A654e74ea99E9c0A15d4468DaE9AfB\"\n}\n\nexport default faucetConfig;\n","import { CHAIN_MARKET_CONFIG, MarketDataType } from \"./market\";\nimport {\n ChainId,\n isSupportedChain,\n NetworkConfig,\n NETWORK_CONFIG,\n} from \"./network\";\n\nimport { StakeConfig, STAKE_CONFIG } from \"./staken\";\n\nimport {FaucetConfig, faucetConfig} from \"./faucet\";\n\nexport type { ChainId, NetworkConfig, MarketDataType, StakeConfig };\nexport { isSupportedChain };\n\nexport const getNetworkConfig = (chainId: ChainId): NetworkConfig =>\n NETWORK_CONFIG[chainId];\n\nexport const getMarketConfig = (chainId: ChainId): MarketDataType =>\n CHAIN_MARKET_CONFIG[chainId];\n\nexport const getStakeConfig = (chainId: ChainId): StakeConfig =>\n STAKE_CONFIG[chainId];\n\nexport const getFauctConfig=():FaucetConfig => faucetConfig;\n","import { AssetSymbol } from \"src/types/models\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { ValueOf } from \"type-fest\";\n\nexport const CHAIN_ID = {\n astar: 592,\n shibuya: 81,\n dev: 31337,\n} as const;\n\nexport type ChainId = ValueOf;\n\nexport const isSupportedChain = (arg: any): arg is ChainId => {\n if (process.env.REACT_APP_ENV === \"dev\") {\n return arg === CHAIN_ID.dev;\n }\n if (process.env.REACT_APP_ENV === \"shibuya\") {\n return arg === CHAIN_ID.shibuya;\n }\n // return Object.values(CHAIN_ID).includes(arg);\n return arg === CHAIN_ID.astar;\n};\n\nexport type NetworkConfig = {\n name: string;\n privateJsonRPCUrl?: string;\n privateJsonRPCWSUrl?: string;\n publicJsonRPCUrl: string[];\n publicJsonRPCWSUrl?: string;\n addresses: {\n walletBalanceProvider: EthereumAddress;\n uiPoolDataProvider: EthereumAddress;\n uiIncentiveDataProvider: EthereumAddress;\n stakeUiHelper: EthereumAddress;\n priceAggregatorAdapterAddress: EthereumAddress;\n };\n protocolDataUrl?: string;\n cachingServerUrl?: string;\n cachingWSServerUrl?: string;\n baseAsset: {\n symbol: AssetSymbol;\n wrapperAddress: EthereumAddress;\n };\n rewardToken: {\n symbol: string;\n address: EthereumAddress;\n underlyingAsset: EthereumAddress;\n decimals: number;\n };\n snapshotProvider?: {\n endpoint: string;\n apiKey?: string;\n };\n\n arthswapDataProvider?: {\n endpoint: string;\n };\n explorerLinks?: string[];\n rpcOnly?: boolean;\n isTestnet?: boolean;\n};\n\nconst SHIBUYA_CONFIG: NetworkConfig = {\n name: \"Shibuya Network\",\n publicJsonRPCUrl: [\"https://shibuya.public.blastapi.io\"],\n addresses: {\n walletBalanceProvider: \"0x8E221306c4992190dc70610D2CC655f58D1c2338\",\n uiPoolDataProvider: \"0x5c2aC460f13CF257266413a711B7dAA6DCFB11B1\",\n uiIncentiveDataProvider: \"0x80316BE51fa5157ef7791E2E214fFb61eeF9DeFe\",\n stakeUiHelper: \"0xdd9e20F18214c0E5C8002707d9df31372C3fb8c9\",\n priceAggregatorAdapterAddress: \"0x9cE8a6795A2F268D803cc51AEe1e046D679e2918\",\n },\n baseAsset: {\n symbol: \"SBY\",\n wrapperAddress: \"0x8Fd43fea01125EcA2bEb0bB03509946ECA99eEf9\",\n },\n rewardToken: {\n symbol: \"stkSiO2\",\n address: \"0xE73d66ba54c491b98041cb62C791361536d1cB1a\",\n underlyingAsset: \"0x76948c31A88496323fEC78B00C68D4b7b612bFE1\",\n decimals: 18,\n },\n snapshotProvider: {\n endpoint: \"https://xok6alsasvgthgl5ozss7upnuu.appsync-api.us-east-1.amazonaws.com/graphql\",\n apiKey: \"da2-qvw2m7hf6jhonms4rhtqgix7ri\",\n },\n\n arthswapDataProvider: {\n endpoint: \"https://arthswap-apr-api.vercel.app/api/graphql\",\n },\n explorerLinks: [\"https://blockscout.com/shibuya\"],\n};\n\nexport const NETWORK_CONFIG: Record = {\n [CHAIN_ID.astar]: {\n name: \"Astar Network\",\n // publicJsonRPCUrl: [\"https://evm.astar.network\"],\n publicJsonRPCUrl: [\"https://astar.blastapi.io/7e4e1127-9f99-4818-be2f-77332a93272d\", \"https://evm.astar.network\"],\n addresses: {\n walletBalanceProvider: \"0xd5BA2601c12456f16401B9DeF0226032d9dbeB3b\",\n uiPoolDataProvider: \"0xF0a90426292B4d1BA69F77B5B0cCB90474324ab8\",\n uiIncentiveDataProvider: \"0x9bcfaed879Df0d6Fe2Cc5059D84Cc67F13B31cF9\",\n stakeUiHelper: \"0x89B2417791b9f935b1fB9C2483cB14Cd662F3908\",\n priceAggregatorAdapterAddress: \"0x5f7c3639A854a27DFf64B320De5C9CAF9C4Bd323\",\n },\n baseAsset: {\n symbol: \"ASTR\",\n wrapperAddress: \"0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720\",\n },\n rewardToken: {\n symbol: \"stkSiO2\",\n address: \"0xEabE3E7F94F9471A252819F8DC9d1F30c355E902\",\n underlyingAsset: \"0xcCA488aEEf7A1D5C633f877453784F025e7cF160\",\n decimals: 18,\n },\n snapshotProvider: {\n endpoint: \"https://xok6alsasvgthgl5ozss7upnuu.appsync-api.us-east-1.amazonaws.com/graphql\",\n apiKey: \"da2-qvw2m7hf6jhonms4rhtqgix7ri\",\n },\n\n arthswapDataProvider: {\n endpoint: \"https://arthswap-apr-api.vercel.app/api/graphql\",\n },\n explorerLinks: [\"https://blockscout.com/astar\"],\n },\n [CHAIN_ID.shibuya]: SHIBUYA_CONFIG,\n [CHAIN_ID.dev]: {\n ...SHIBUYA_CONFIG,\n name: \"local dev Network\",\n publicJsonRPCUrl: [\"http://localhost:8545\"],\n },\n};\n","import { messages as messagesEn } from \"src/locales/en/messages\";\nimport { messages as messagesZh } from \"src/locales/zh/messages\";\nimport { messages as messagesVi } from \"src/locales/vi/messages\";\nimport { messages as messagesKo } from \"src/locales/ko/messages\";\nimport { messages as messagesTr } from \"src/locales/tr/messages\";\nimport { messages as messagesId } from \"src/locales/id/messages\";\nimport { messages as messagesJa } from \"src/locales/ja/messages\";\nimport { messages as messagesRu } from \"src/locales/ru/messages\";\n\nexport type Locale = typeof SUPPORTED_LOCALES[number];\n\nexport const SUPPORTED_LOCALES = [\n \"en\",\n \"zh\",\n \"vi\",\n \"ko\",\n \"tr\",\n \"id\",\n \"ja\",\n \"ru\",\n] as const;\n\nexport const DEFAULT_LOCALE: Locale = \"en\";\n\nexport const isSupportedLocale = (arg: any): arg is Locale =>\n SUPPORTED_LOCALES.includes(arg);\n\nexport const MESSAGES: Record = {\n en: messagesEn,\n\n zh: messagesZh,\n vi: messagesVi,\n ko: messagesKo,\n tr: messagesTr,\n id: messagesId,\n ja: messagesJa,\n ru: messagesRu,\n};\n\nexport const LOCALES_DICT: Record = {\n en: \"English\",\n zh: \"中文(简体)\",\n vi: \"Tiếng Việt\",\n ko: \"Korean\",\n tr: \"Türk\",\n id: \"bahasa Indonesia\",\n ja: \"日本語\",\n ru: \"Türk\",\n};\n","import { defaultSetting } from \"@/hook/app/useAppSetting\";\nimport { getSettingStorage } from \"@/utils/localStorage\";\nimport { i18n } from \"@lingui/core\";\nimport { I18nProvider as LinguijsProvider } from \"@lingui/react\";\nimport * as plurals from \"make-plural/plurals\";\nimport { useEffect } from \"react\";\nimport {\n DEFAULT_LOCALE,\n isSupportedLocale,\n Locale,\n MESSAGES,\n SUPPORTED_LOCALES,\n} from \"src/locales\";\n\nexport const I18nProvider: React.FC<{ children: React.ReactNode }> = ({\n children,\n}) => {\n useEffect(() => {\n let settingData = getSettingStorage() || defaultSetting;\n loadSync(settingData.language as Locale);\n }, []);\n return {children};\n};\n\nexport const load = async (locale: string) => {\n if (!isSupportedLocale(locale)) return;\n const { messages } = await import(`src/locales/${locale}/messages.po`);\n i18n.load(locale, messages);\n i18n.activate(locale);\n};\n\nexport const loadSync = (locale: Locale = DEFAULT_LOCALE) => {\n console.log(locale, \"locale\");\n i18n.load(locale, MESSAGES[locale]);\n i18n.activate(locale);\n};\n\nSUPPORTED_LOCALES.forEach((locale) => {\n i18n.loadLocaleData(locale, { plurals: plurals[locale] });\n});\n","import { API_ETH_MOCK_ADDRESS } from \"submodule/packages/contract-helpers/dist/cjs\";\n\nexport const BASE_ASSET_DUMMY_ADDRESS = API_ETH_MOCK_ADDRESS.toLowerCase();\n","import {\n ReserveIncentiveWithFeedsResponse,\n ReservesDataHumanized,\n} from \"submodule/packages/contract-helpers/dist/cjs\";\nimport {\n calculateAllReserveIncentives,\n formatReserve,\n getComputedReserveFields,\n normalize,\n normalizeBN,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { NetworkConfig } from \"src/libs/config\";\nimport { equals } from \"src/utils/address\";\nimport { BASE_ASSET_DUMMY_ADDRESS } from \"./constants\";\n\nexport const formatReserves = (\n protocolData: ReservesDataHumanized,\n reserveIncentives: ReserveIncentiveWithFeedsResponse[],\n currentTimestamp: number,\n baseAsset: NetworkConfig[\"baseAsset\"],\n rewardUndelyingAssetDict?: Record\n) => {\n const {\n reservesData,\n baseCurrencyData: {\n marketReferenceCurrencyDecimals,\n marketReferenceCurrencyPriceInUsd,\n networkBaseTokenPriceDecimals,\n },\n } = protocolData;\n\n const formattedReserves = reservesData.map((reserve) => {\n const formattedReserve = {\n ...reserve,\n ...formatReserve({ reserve, currentTimestamp }),\n priceInMarketReferenceCurrency: normalize(\n reserve.priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals\n ),\n marketReferenceCurrencyDecimals,\n };\n if (!equals(formattedReserve.underlyingAsset, baseAsset.wrapperAddress))\n return formattedReserve;\n return {\n ...formattedReserve,\n symbol: baseAsset.symbol,\n underlyingAsset: BASE_ASSET_DUMMY_ADDRESS,\n };\n });\n\n const incentivesByUnderlyingAsset = calculateAllReserveIncentives({\n reserveIncentives: reserveIncentives.map((each) =>\n !equals(each.underlyingAsset, baseAsset.wrapperAddress)\n ? each\n : { ...each, underlyingAsset: BASE_ASSET_DUMMY_ADDRESS }\n ),\n reserves: reservesData.map((reserve) => {\n const computed = getComputedReserveFields({ reserve, currentTimestamp });\n return {\n underlyingAsset: !equals(\n reserve.underlyingAsset,\n baseAsset.wrapperAddress\n )\n ? reserve.underlyingAsset\n : BASE_ASSET_DUMMY_ADDRESS,\n symbol: reserve.symbol.toLowerCase(),\n totalLiquidity: computed.totalLiquidity.toString(),\n totalVariableDebt: computed.totalVariableDebt.toString(),\n totalStableDebt: computed.totalStableDebt.toString(),\n priceInMarketReferenceCurrency: normalize(\n reserve.priceInMarketReferenceCurrency,\n marketReferenceCurrencyDecimals\n ),\n decimals: reserve.decimals,\n marketReferenceCurrencyDecimals,\n };\n }),\n underlyingAsserDict: rewardUndelyingAssetDict,\n });\n\n return {\n reservesData: formattedReserves,\n incentivesByUnderlyingAsset,\n marketReferenceCurrencyPriceInUSD: normalizeBN(\n marketReferenceCurrencyPriceInUsd,\n networkBaseTokenPriceDecimals\n ),\n marketReferenceCurrencyDecimals,\n };\n};\n","import {\n ReservesDataHumanized,\n UserReserveDataHumanized,\n} from \"submodule/packages/contract-helpers/dist/cjs\";\nimport {\n formatUserSummary,\n FormatUserSummaryResponse,\n normalize,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { NetworkConfig } from \"src/libs/config\";\nimport { equals } from \"src/utils/address\";\nimport { PoolReservesData } from \"../types\";\nimport { BASE_ASSET_DUMMY_ADDRESS } from \"./constants\";\n\nexport const formatUserReserves = (\n poolUserData: UserReserveDataHumanized[],\n poolReservesData: PoolReservesData,\n baseAsset: NetworkConfig[\"baseAsset\"]\n): FormatUserSummaryResponse => {\n const { timestamp, reservesData, baseCurrencyData } = poolReservesData;\n const { networkBaseTokenPriceDecimals } = baseCurrencyData;\n const userSummary = toUserSummary(\n poolUserData,\n reservesData,\n baseCurrencyData,\n timestamp,\n baseAsset\n );\n return {\n ...userSummary,\n totalLiquidityUSD: normalize(\n userSummary.totalLiquidityUSD,\n networkBaseTokenPriceDecimals\n ),\n totalCollateralUSD: normalize(\n userSummary.totalCollateralUSD,\n networkBaseTokenPriceDecimals\n ),\n totalBorrowsUSD: normalize(\n userSummary.totalBorrowsUSD,\n networkBaseTokenPriceDecimals\n ),\n availableBorrowsUSD: normalize(\n userSummary.availableBorrowsUSD,\n networkBaseTokenPriceDecimals\n ),\n };\n};\n\nconst toUserSummary = (\n userData: UserReserveDataHumanized[],\n reserves: ReservesDataHumanized[\"reservesData\"],\n baseCurrencyData: ReservesDataHumanized[\"baseCurrencyData\"],\n currentTimestamp: number,\n baseAsset: NetworkConfig[\"baseAsset\"]\n) =>\n formatUserSummary({\n currentTimestamp,\n marketRefCurrencyDecimals: baseCurrencyData.marketReferenceCurrencyDecimals,\n marketRefPriceInUsd: baseCurrencyData.marketReferenceCurrencyPriceInUsd,\n rawUserReserves: userData\n .map((userReserve) => {\n const reserve = reserves.find((reserve) =>\n equals(reserve.underlyingAsset, userReserve.underlyingAsset)\n );\n // eslint-disable-next-line array-callback-return\n if (!reserve) return;\n const reserveWithBase = {\n ...userReserve,\n reserve,\n };\n if (!equals(reserve.underlyingAsset, baseAsset.wrapperAddress))\n return reserveWithBase;\n return {\n ...userReserve,\n underlyingAsset: BASE_ASSET_DUMMY_ADDRESS,\n reserve: {\n ...reserve,\n symbol: baseAsset.symbol,\n underlyingAsset: BASE_ASSET_DUMMY_ADDRESS,\n },\n };\n })\n .filter(onlyNonNull),\n });\n\nconst onlyNonNull = (value: T | null | undefined): value is T =>\n value != null;\n","import {\n ReserveDataHumanized,\n UiIncentiveDataProvider,\n UiIncentiveDataProviderInterface,\n UiPoolDataProvider,\n UiPoolDataProviderInterface,\n UserReserveDataHumanized,\n UserReserveIncentiveDataHumanizedResponse,\n} from \"submodule/packages/contract-helpers/dist/cjs\";\nimport {\n BigNumber,\n calculateAllUserIncentives,\n getComputedReserveFields,\n normalizeBN,\n UserReserveCalculationData,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { ethers } from \"ethers\";\nimport { NetworkConfig } from \"src/libs/config\";\nimport { EthereumAddress } from \"src/types/web3\";\nimport { equals } from \"src/utils/address\";\nimport { BN_ZERO } from \"src/utils/number\";\nimport { formatReserves, formatUserReserves } from \"../../converters\";\nimport { PoolDataProviderInterface, PoolReservesData } from \"../../types\";\n\nexport class RPCClient implements PoolDataProviderInterface {\n constructor(\n private uiPoolDataProvider: UiPoolDataProviderInterface,\n private uiIncentiveDataProvider: UiIncentiveDataProviderInterface,\n private lendingPoolAddressProvider: EthereumAddress,\n private baseAsset: NetworkConfig[\"baseAsset\"],\n private rewardToken: EthereumAddress,\n private rewardUndelyingAssetDict: Record\n ) {}\n\n static new = (params: {\n uiPoolDataProvider: EthereumAddress;\n uiIncentiveDataProvider: EthereumAddress;\n lendingPoolAddressProvider: EthereumAddress;\n priceAggregatorAdapterAddress: EthereumAddress;\n baseAsset: NetworkConfig[\"baseAsset\"];\n provider: ethers.providers.Provider;\n rewardToken: EthereumAddress;\n rewardUndelyingAssetDict: Record;\n }) =>\n new RPCClient(\n new UiPoolDataProvider({\n uiPoolDataProviderAddress: params.uiPoolDataProvider,\n provider: params.provider,\n }),\n new UiIncentiveDataProvider({\n incentiveDataProviderAddress: params.uiIncentiveDataProvider,\n priceAggregatorAdapterAddress: params.priceAggregatorAdapterAddress,\n provider: params.provider,\n }),\n params.lendingPoolAddressProvider,\n params.baseAsset,\n params.rewardToken,\n params.rewardUndelyingAssetDict\n );\n\n getReservesWithIncentives = async (\n currentTimestamp: number,\n rewardToken?: {\n address: EthereumAddress;\n priceInUSD: BigNumber;\n }\n ) => {\n const {\n uiPoolDataProvider,\n uiIncentiveDataProvider,\n lendingPoolAddressProvider,\n baseAsset,\n rewardUndelyingAssetDict,\n } = this;\n const [poolData, reservesIncentives] = await Promise.all([\n uiPoolDataProvider.getReservesHumanized(lendingPoolAddressProvider),\n uiIncentiveDataProvider.getIncentivesDataWithPrice({\n lendingPoolAddressProvider,\n }),\n ]);\n\n const reservesData = !rewardToken\n ? poolData.reservesData\n : poolData.reservesData.map((e) => {\n if (!equals(e.underlyingAsset, rewardToken.address)) return e;\n return {\n ...e,\n priceInMarketReferenceCurrency: rewardToken.priceInUSD\n .shiftedBy(\n poolData.baseCurrencyData.marketReferenceCurrencyDecimals\n )\n .toString(),\n };\n });\n return {\n ...formatReserves(\n { ...poolData, reservesData },\n reservesIncentives,\n currentTimestamp,\n baseAsset,\n rewardUndelyingAssetDict\n ),\n rawReservesData: reservesData,\n rawBaseCurrencyData: poolData.baseCurrencyData,\n rawReserveIncentivesData: reservesIncentives,\n };\n };\n\n getUserReservesWithIncentive = async (\n account: EthereumAddress,\n poolReservesData: PoolReservesData\n ) => {\n const {\n uiPoolDataProvider,\n uiIncentiveDataProvider,\n lendingPoolAddressProvider,\n baseAsset,\n rewardToken,\n rewardUndelyingAssetDict,\n } = this;\n const userReserves = await uiPoolDataProvider.getUserReservesHumanized(\n lendingPoolAddressProvider,\n account\n );\n\n const userReserveIncentives =\n await uiIncentiveDataProvider.getUserReservesIncentivesDataHumanized(\n account,\n lendingPoolAddressProvider\n );\n\n return {\n reserves: formatUserReserves(userReserves, poolReservesData, baseAsset),\n incentive: calcIncentive(\n userReserves,\n userReserveIncentives,\n poolReservesData,\n rewardToken,\n rewardUndelyingAssetDict[rewardToken] || rewardToken\n ),\n };\n };\n}\nconst calcIncentive = (\n userReserves: UserReserveDataHumanized[],\n userReserveIncentives: UserReserveIncentiveDataHumanizedResponse[],\n poolReservesData: PoolReservesData,\n rewardToken: EthereumAddress,\n rewardUndelyingAsset: string\n) => {\n const incentives = calculateAllUserIncentives({\n userReserves: computedUserReserves(\n userReserves,\n poolReservesData.reservesData,\n poolReservesData.timestamp\n ),\n userReserveIncentives,\n reserveIncentives: poolReservesData.reserveIncentivesData,\n currentTimestamp: poolReservesData.timestamp,\n });\n\n const unclaimedBalance = Object.values(incentives)\n .filter(\n (each) =>\n equals(each.rewardTokenAddress, rewardToken) ||\n equals(each.rewardTokenAddress, rewardUndelyingAsset)\n )\n .reduce((prev, current) => {\n return prev.plus(\n normalizeBN(current.claimableRewards, current.rewardTokenDecimals)\n );\n }, BN_ZERO);\n\n return {\n address: rewardToken,\n underlyingAsset: rewardUndelyingAsset as EthereumAddress,\n unclaimedBalance,\n };\n};\n\nconst computedUserReserves = (\n userReserves: UserReserveDataHumanized[],\n reserves: ReserveDataHumanized[],\n currentTimestamp: number\n) =>\n userReserves\n .map((userReserve) => {\n const reserve = reserves.find(\n (reserve) =>\n reserve.underlyingAsset.toLowerCase() ===\n userReserve.underlyingAsset.toLowerCase()\n );\n if (!reserve) return undefined;\n const supplies = getComputedReserveFields({ reserve, currentTimestamp });\n // Construct UserReserveData object from reserve and userReserve fields\n return {\n underlyingAsset: userReserve.underlyingAsset.toLowerCase(),\n totalLiquidity: supplies.totalLiquidity.toString(),\n liquidityIndex: reserve.liquidityIndex,\n totalScaledVariableDebt: reserve.totalScaledVariableDebt,\n totalPrincipalStableDebt: reserve.totalPrincipalStableDebt,\n scaledSTokenBalance: userReserve.scaledSTokenBalance,\n scaledVariableDebt: userReserve.scaledVariableDebt,\n principalStableDebt: userReserve.principalStableDebt,\n };\n })\n .filter(Boolean) as UserReserveCalculationData[];\n","import { ChainId, getMarketConfig, getNetworkConfig } from 'src/libs/config'\nimport { EthereumAddress } from 'src/types/web3'\nimport { RPCClient } from './providers'\nimport { PoolDataProviderInterface, StaticRPCProvider } from './types'\n\nexport * from './converters'\nexport * from './types'\n\nexport type PoolDataProvider = {\n chainId: ChainId\n provider: PoolDataProviderInterface\n}\n\nexport const getPoolDataProvider = ({\n chainId,\n provider,\n}: StaticRPCProvider): PoolDataProvider => {\n const { addresses, baseAsset, rewardToken } = getNetworkConfig(chainId)\n const {\n addresses: { LENDING_POOL_ADDRESS_PROVIDER },\n } = getMarketConfig(chainId)\n const {\n uiPoolDataProvider,\n uiIncentiveDataProvider,\n priceAggregatorAdapterAddress,\n } = addresses\n const rewardTokenAddress =\n rewardToken.address.toLowerCase() as EthereumAddress\n return {\n chainId,\n provider: RPCClient.new({\n uiPoolDataProvider,\n uiIncentiveDataProvider,\n priceAggregatorAdapterAddress,\n lendingPoolAddressProvider: LENDING_POOL_ADDRESS_PROVIDER,\n baseAsset,\n provider,\n rewardToken: rewardTokenAddress,\n rewardUndelyingAssetDict: {\n [rewardTokenAddress]: rewardToken.underlyingAsset.toLowerCase(),\n },\n }),\n }\n}\n","import {\n StakingService,\n Stake,\n} from \"submodule/packages/contract-helpers/dist/cjs\";\nimport { getStakeConfig } from \"../config\";\nimport { StaticRPCProvider } from \"../pool-data-provider\";\n\nexport const stakenContract = ({ chainId, provider }: StaticRPCProvider) =>\n new StakingService(provider, {\n TOKEN_STAKING_ADDRESS:\n getStakeConfig(chainId).tokens[Stake.sio2].TOKEN_STAKING,\n STAKING_HELPER_ADDRESS:\n getStakeConfig(chainId).tokens[Stake.sio2].STAKING_HELPER,\n });\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { InjectedConnector } from \"@web3-react/injected-connector\";\nimport { WalletConnector, WalletType } from \"../types\";\nimport { safeMultisigConnector } from \"./safe\";\n\nconst onConnect = async () => {\n const { ethereum } = window;\n if (!(ethereum && ethereum.isMetaMask))\n return Promise.reject(\"Please make Metamask available\");\n await ethereum.request({ method: \"eth_requestAccounts\" });\n};\n\nconst connector = new InjectedConnector({});\n\nexport const metamaskConnector: WalletConnector = {\n type: \"Metamask\",\n connector,\n onConnect,\n};\n\nexport const connectIfAuthorized = (\n connect: (type: WalletType) => Promise\n) => {\n // UPDATE: user might login with two wallets. Prioritize safe connector in safe context.\n safeMultisigConnector.connector.isSafeApp().then(isSafeApp =>{\n if(!isSafeApp)\n metamaskConnector.connector.isAuthorized().then((isAuthorized) => {\n if (!isAuthorized) return;\n connect(\"Metamask\").catch((error) =>\n console.error(\"Error occured on trying to connect MetaMask\", error)\n );\n }) \n });\n};\n\nexport const removeAllListeners = () => {\n const { ethereum } = window;\n if (!ethereum) return;\n ethereum.removeAllListeners(\"chainChanged\");\n ethereum.removeAllListeners(\"accountsChanged\");\n};\n\nexport const addListenersOnConnected = (\n connect: (type: WalletType) => Promise,\n disconnect: VoidFunction\n) => {\n const { ethereum } = window;\n if (ethereum?.isMetaMask) {\n removeAllListeners();\n ethereum.on(\"accountsChanged\", (accounts) => {\n if (!accounts.length) {\n disconnect();\n return;\n }\n connect(\"Metamask\").catch((error) => {\n console.error(\"Failed to activate after accountsChanged\", error);\n });\n });\n ethereum.on(\"chainChanged\", () =>\n connect(\"Metamask\").catch((error) => {\n console.error(\"Failed to activate after chainChanged\", error);\n })\n );\n }\n};\n\nexport const requestSwitchChain = async (\n chainId: number,\n chainInfo?: AddEthereumChainParameter\n): Promise<{ error?: string }> => {\n const { ethereum } = window;\n if (!ethereum?.isMetaMask)\n return { error: `Your wallet needs to switch networks manually.` };\n try {\n const chainIdHex = `0x${(+BigNumber.from(chainId)).toString(16)}`;\n await ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: chainIdHex }],\n });\n\n return {};\n } catch (e: any) {\n console.log(e, \"eee\");\n if (e.code === 4902 && chainInfo) return requestAddEthereumChain(chainInfo);\n return { error: `Your wallet needs to switch networks manually.` };\n }\n};\n\nexport const requestAddEthereumChain = async (\n chainInfo: AddEthereumChainParameter\n) => {\n const { ethereum } = window;\n if (!ethereum?.isMetaMask)\n return { error: \"Your wallet needs to switch networks manually.\" };\n try {\n if (!chainInfo.rpcUrls.length) throw new Error();\n await ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [chainInfo],\n });\n return {};\n } catch (e) {\n return { error: \"Your wallet needs to switch networks manually.\" };\n }\n};\n","import { ethers } from \"ethers\";\nimport { metamaskConnector} from \"./providers/metamask\";\nimport { safeMultisigConnector } from \"./providers/safe\";\nimport { WalletType } from \"./types\";\n\nexport * as metamask from \"./providers/metamask\";\nexport * from \"./types\";\n\nexport const getConnector = (type: WalletType) => {\n switch (type) {\n case \"Metamask\":\n return metamaskConnector;\n case \"Safe\":\n return safeMultisigConnector\n default:\n return metamaskConnector;\n }\n};\n\nexport const getLibrary = (provider: any): ethers.providers.Web3Provider => {\n const library = new ethers.providers.Web3Provider(\n provider,\n typeof provider.chainId === \"number\"\n ? provider.chainId\n : typeof provider.chainId === \"string\"\n ? parseInt(provider.chainId)\n : \"any\"\n );\n return library;\n};\n\n/**\n * Add an ERC20 token to metamask assets menu.\n *\n * @param tokenSymbol Symbol for token (e.g. \"BAI\")\n * @param tokenAddress Address to the ERC20 token contract.\n * @param tokenImage Optional image URL of the token to display\n * @param tokenPrecision Optional decimal precision value for Collateral tokens\n */\nexport async function addERC20TokenToMetamask(\n tokenSymbol: string,\n tokenAddress: string,\n tokenPrecision?: number,\n tokenImage?: string\n) {\n if (!window.ethereum) {\n console.error(\n `Metamask not available. Cannot add ${tokenSymbol} to Metamask`\n );\n return;\n }\n\n const ethereum = window.ethereum! as any;\n const watchAssetOptions = {\n address: tokenAddress, // The address that the token is at.\n symbol: tokenSymbol, // A ticker symbol or shorthand, up to 5 chars.\n decimals: tokenPrecision ?? 18, // The number of decimals in the token\n };\n if (tokenImage) {\n // TODO: Add token images\n (watchAssetOptions as any).image = tokenImage; // A string url of the token logo\n }\n try {\n // wasAdded is a boolean. Like any RPC method, an error may be thrown.\n const wasAdded = await ethereum.request({\n method: \"wallet_watchAsset\",\n params: {\n type: \"ERC20\", // Initially only supports ERC20, but eventually more!\n options: watchAssetOptions,\n },\n });\n\n if (wasAdded) {\n console.log(`${tokenSymbol} added to Metamask`);\n } else {\n console.log(`${tokenSymbol} NOT added to Metamask`);\n }\n } catch (error) {\n console.log(error);\n }\n}\n","import { SafeAppConnector } from '@gnosis.pm/safe-apps-web3-react';\nimport { WalletConnector } from '../types';\n\nconst safeAppConnector = new SafeAppConnector({})\n\nexport const safeMultisigConnector: WalletConnector = {\n type: \"Safe\",\n connector : safeAppConnector,\n};\n \n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"Audited by\",\n \"Powered by\": \"Powered by\",\n \"Please, connect your wallet\": \"Please, connect your wallet\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\",\n \"Connect Wallet\": \"Connect Wallet\",\n \"You need to change to a supported chain\":\n \"You need to change to a supported chain\",\n \"Please switch the chain with your wallet.\":\n \"Please switch the chain with your wallet.\",\n \"Failed to switch the chain\": \"Failed to switch the chain\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"In local-dev mode, only localhost:8545 network can be connected\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2 Finance is not yet depolyed to this network\",\n \"Please switch to\": \"Please switch to\",\n \"Change Network\": \"Change Network\",\n \"No Data\": \"No Data\",\n Show: \"Show\",\n Hide: \"Hide\",\n show: \"show\",\n hide: \"hide\",\n \"Copy Success\": \"Copy Success\",\n \"No account\": \"No account\",\n Network: \"Network\",\n \"Copy Address\": \"Copy Address\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"Disconnect Wallet\",\n Menu: \"Menu\",\n \"Global Setting\": \"Global Setting\",\n \"Dark Mode\": \"Dark Mode\",\n \"Select Language\": \"Select Language\",\n \"Add Tokens\": \"Add Tokens\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n\",\n [\"SIO2_PRICE\"],\n \". For more information, please visit our documentation.\",\n ],\n Borrow: \"Borrow\",\n Repay: \"Repay\",\n Amount: \"Amount\",\n Max: \"Max\",\n \"Transaction overview\": \"Transaction overview\",\n \"Borrow APY\": \"Borrow APY\",\n \"Borrow APR\": \"Borrow APR\",\n Borrowed: \"Borrowed\",\n \"Borrow Limit Used\": \"Borrow Limit Used\",\n \"Health Factor\": \"Health Factor\",\n Liquidity: \"Liquidity\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.',\n \"Josh here!\":\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.',\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.',\n \"{0}\": [[\"0\"]],\n Collateral: \"Collateral\",\n ON: \"ON\",\n OFF: \"OFF\",\n Collateral_Amount: \"Collateral_Amount\",\n \"Borrowed Available\": \"Borrowed Available\",\n Disable: \"Disable\",\n Enable: \"Enable\",\n Deposited: \"Deposited\",\n Supply: \"Supply\",\n Withdraw: \"Withdraw\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\",\n \"Supply APY\": \"Supply APY\",\n \"Supply APR\": \"Supply APR\",\n \"Borrow Available\": \"Borrow Available\",\n \"This asset can't be used as collateral.\":\n \"This asset can't be used as collateral.\",\n \"Wallet Balance\": \"Wallet Balance\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\",\n Dashboard: \"Dashboard\",\n Market: \"Market\",\n Stake: \"Stake\",\n \"Public Sale\": \"Public Sale\",\n Faucet: \"Faucet\",\n \"Transaction Preparing\": \"Transaction Preparing\",\n \"Waiting for transaction to be ready...\":\n \"Waiting for transaction to be ready...\",\n \"Confirm Transaction\": \"Confirm Transaction\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"Approve sending the ERC-20 asset to the pool.\",\n \"Transaction Pending\": \"Transaction Pending\",\n \"Waiting for the transaction to be confirmed...\":\n \"Waiting for the transaction to be confirmed...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"Approve the contract to borrow ERC-20 assets on your credit.\",\n \"Confirm the transaction.\": \"Confirm the transaction.\",\n \"Transaction Submitted\": \"Transaction Submitted\",\n \"Succeeded!\": \"Succeeded!\",\n \"Your transaction confirmed!\": \"Your transaction confirmed!\",\n \"Transaction Canceled\": \"Transaction Canceled\",\n \"You have canceled the transaction.\": \"You have canceled the transaction.\",\n Error: \"Error\",\n \"Enter amount\": \"Enter amount\",\n \"No balance to deposit\": \"No balance to deposit\",\n \"No balance to withdraw\": \"No balance to withdraw\",\n \"Insufficient collateral\": \"Insufficient collateral\",\n \"No liquidity to withdraw\": \"No liquidity to withdraw\",\n \"Health factor too low\": \"Health factor too low\",\n \"Borrowing limit reached\": \"Borrowing limit reached\",\n \"No liquidity to borrow\": \"No liquidity to borrow\",\n \"Not enough wallet balance to repay\": \"Not enough wallet balance to repay\",\n \"No borrowed balance to repay\": \"No borrowed balance to repay\",\n \"Enter leverage\": \"Enter leverage\",\n \"No balance to loop\": \"No balance to loop\",\n \"Supply Balance\": \"Supply Balance\",\n \"Borrow Balance\": \"Borrow Balance\",\n Asset: \"Asset\",\n \"Reward APR\": \"Reward APR\",\n \"Interest Rate\": \"Interest Rate\",\n \"Borrow Markets\": \"Borrow Markets\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"The weighted average of APY for all supplied assets,including incentives\",\n Supplied: \"Supplied\",\n \"Supply Markets\": \"Supply Markets\",\n \"Net APY\": \"Net APY\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\",\n \"1. supply more collateral\": \"1. supply more collateral\",\n \"2. repay borrow positions\": \"2. repay borrow positions\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"When your health factor is below 1, your collateral will be liquidated.\",\n \"RISK DETAILS\": \"RISK DETAILS\",\n Claim: \"Claim\",\n \"Available SIO2 Rewards\": \"Available SIO2 Rewards\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\",\n \"Learn more\": \"Learn more\",\n Name: \"Name\",\n Action: \"Action\",\n Mint: \"Mint\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\",\n \"Total Supplied\": \"Total Supplied\",\n \"Total Borrowed\": \"Total Borrowed\",\n \"Supply Reward APR\": \"Supply Reward APR\",\n \"Borrow Interest Rate\": \"Borrow Interest Rate\",\n \"Borrow Reward APR\": \"Borrow Reward APR\",\n Details: \"Details\",\n Price: \"Price\",\n Borrowing: \"Borrowing\",\n Yes: \"Yes\",\n No: \"No\",\n \"Reserve Factor\": \"Reserve Factor\",\n \"Used as Collateral\": \"Used as Collateral\",\n \"Loan to Value\": \"Loan to Value\",\n \"Liquidation Threshold\": \"Liquidation Threshold\",\n \"Liquidation Penalty\": \"Liquidation Penalty\",\n \"Market Details\": \"Market Details\",\n \"Asset Pools\": \"Asset Pools\",\n Detail: \"Details\",\n Others: \"Others\",\n total: \"total\",\n \"Top3 Markets\": \"Top3 Markets\",\n \"Astar Network\": \"Astar Network\",\n Token: \"Token\",\n \"SIO2 Token(SIO2)\": \"SIO2 Token(SIO2)\",\n \"Total Raised\": \"Total Raised\",\n \"Sales Opened\": \"Sales Opened\",\n TBD: \"TBD\",\n \"Sales Closed\": \"Sales Closed\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"This page is developed for public sale on mainnet, but not testnet.\",\n \"SIO2 PUBLIC SALE\": \"SIO2 PUBLIC SALE\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\",\n Purchase: \"Purchase\",\n \"$ {0}\": [\"$ \", [\"0\"]],\n \"Stake SIO2\": \"Stake SIO2\",\n Staking: \"Staking\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\",\n \"Total emission per day\": \"Total emission per day\",\n \"Claim Rewards\": \"Claim Rewards\",\n \"Funds in the Safety Module\": \"Funds in the Safety Module\",\n \"1 year\": \"1 year\",\n \"2 years\": \"2 years\",\n \"3 years\": \"3 years\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"The amount you're trying to stake exceeds your balance by \",\n [\"0\"],\n \" SIO2\",\n ],\n \"Locked Staking\": \"Locked Staking\",\n Balance: \"Balance\",\n \"Duration (years)\": \"Duration (years)\",\n \"Pool Share\": \"Pool Share\",\n Confirm: \"Confirm\",\n ID: \"ID\",\n \"Staked Amount\": \"Staked Amount\",\n \"Weighted Staked Amount\": \"Weighted Staked Amount\",\n \"Date Time\": \"Date Time\",\n \"Locked Until\": \"Locked Until\",\n Redeem: \"Redeem\",\n \"Locked Stakes\": \"Locked Stakes\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\",\n Summary: \"Summary\",\n \"Staking APR\": \"Staking APR\",\n \"Unweighted Stake\": \"Unweighted Stake\",\n \"Weighted Stake\": \"Weighted Stake\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"Diaudit oleh\",\n \"Powered by\": \"Dipersembahkan oleh\",\n \"Please, connect your wallet\": \"Tolong, hubungkan dompet Anda \",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"Silakan hubungkan dompet Anda untuk melihat persediaan, pinjaman, dan posisi terbuka Anda \",\n \"Connect Wallet\": \"hubungkan dompet\",\n \"You need to change to a supported chain\":\n \"Anda perlu mengubah ke rantai yang didukung \",\n \"Please switch the chain with your wallet.\":\n \"Silakan ganti rantai dengan dompet Anda.\",\n \"Failed to switch the chain\": \"Gagal mengganti rantai \",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"Dalam mode pengembang lokal, hanya jaringan localhost:8545 yang dapat terhubung \",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2 Finance belum diterapkan ke jaringan ini \",\n \"Please switch to\": \"Silakan beralih ke \",\n \"Change Network\": \"Ubah Jaringan \",\n \"No Data\": \"Tidak ada data \",\n Show: \"Menunjukkan\",\n Hide: \"Bersembunyi\",\n \"Copy Success\": \"Salin Sukses \",\n \"No account\": \"Tidak Ada Akun\",\n Network: \"Jaringan\",\n \"Copy Address\": \"Salin Alamat\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"Memutuskan Dompet\",\n Menu: \"Menu\",\n \"Global Setting\": \"Pengaturan global \",\n \"Dark Mode\": \"Mode Gelap\",\n \"Select Language\": \"Pilih Bahasa\",\n \"Add Tokens\": \"Tambahkan Token\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"Kami belum meluncurkan token SIO2 secara publik, jadi token SIO2 tidak memiliki pasar\\nharga sekarang. Oleh karena itu kami menghitung APR berdasarkan perkiraan harga token, $\\n\",\n [\"SIO2_PRICE\"],\n \". Untuk informasi lebih lanjut, kunjungi dokumentasi kami.\",\n ],\n Borrow: \"Meminjam\",\n Repay: \"Membalas\",\n Amount: \"Jumlah\",\n Max: \"Maksimal\",\n \"Transaction overview\": \"Ikhtisar transaksi \",\n \"Borrow APY\": \"Meminjam APY\",\n \"Borrow APR\": \"Meminjam APR\",\n Borrowed: \"Dipinjam \",\n \"Borrow Limit Used\": \"Batas Pinjam Digunakan \",\n \"Health Factor\": \"Faktor Kesehatan \",\n Liquidity: \"Likuiditas\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"Karena bunga dan nilai berfluktuasi sepanjang waktu, nilai maksimum\\ndari max mungkin tidak dapat sepenuhnya melunasi semua pinjaman.\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh di sini! Minggu pertama adalah \"Minggu Canary\" tambang kristal kami. Kami mendorong pengguna untuk menjaga faktor kesehatan > 4 untuk bersiap menghadapi semua kondisi pasar. Baca <0>artikel untuk detail selengkapnya.',\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh di sini! Minggu pertama adalah \"Minggu Canary\" tambang kristal kami. Kami mendorong pengguna untuk menjaga faktor kesehatan> 4 untuk mempersiapkan semua kondisi pasar. Baca <0>artikel untuk detail selengkapnya.',\n Collateral: \"Jaminan \",\n ON: \"PADA\",\n OFF: \"MATI\",\n Collateral_Amount: \"Jumlah Jaminan\",\n \"Borrowed Available\": \"Dipinjam Tersedia \",\n Disable: \"Cacat \",\n Enable: \"Memungkinkan \",\n Deposited: \"Didepositokan \",\n Supply: \"Memasok\",\n Withdraw: \"Menarik \",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"Untuk menerima <0>hadiah staking ASTR dari <1>Algem, harap berikan $nASTR Anda melalui <2>adaptor SiO2 dalam Algem DApp.\",\n \"Supply APY\": \"Memasok APY \",\n \"Supply APR\": \"Memasok APR\",\n \"Borrow Available\": \"Pinjam Tersedia \",\n \"This asset can't be used as collateral.\":\n \"Aset ini tidak dapat digunakan sebagai jaminan。\",\n \"Wallet Balance\": \"Saldo Dompet \",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"Karena bunga akan terus terakumulasi saat konfirmasi transaksi, jumlah maksimal yang dimasukkan mungkin tidak mencerminkan total yang Anda peroleh saat transaksi selesai\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"Karena minat dan nilai berfluktuasi dari waktu ke waktu, maks\\nnilai mungkin tidak dapat sepenuhnya menghapus semua simpanan\",\n Dashboard: \"Dasbor \",\n Market: \"Pasar \",\n Stake: \"Mempertaruhkan \",\n \"Public Sale\": \"Penjualan Umum \",\n Faucet: \"Keran \",\n \"Transaction Preparing\": \"Persiapan Transaksi\",\n \"Waiting for transaction to be ready...\": \"Menunggu transaksi siap...\",\n \"Confirm Transaction\": \"Konfirmasi Transaksi\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"Setujui pengiriman aset ERC-20 ke kumpulan.\",\n \"Transaction Pending\": \"Transaksi Tertunda\",\n \"Waiting for the transaction to be confirmed...\":\n \"Menunggu transaksi dikonfirmasi...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"Menyetujui kontrak untuk meminjam aset ERC-20 dengan kredit Anda.\",\n \"Confirm the transaction.\": \"Konfirmasi transaksi.\",\n \"Transaction Submitted\": \"Transaksi Dikirim\",\n \"Succeeded!\": \"Berhasil!\",\n \"Your transaction confirmed!\": \"Transaksi Anda dikonfirmasi!\",\n \"Transaction Canceled\": \"Transaksi Dibatalkan\",\n \"You have canceled the transaction.\": \"Anda telah membatalkan transaksi.\",\n Error: \"Kesalahan\",\n \"Enter amount\": \"Masukkan jumlah\",\n \"No balance to deposit\": \"Tidak ada saldo untuk disetor\",\n \"No balance to withdraw\": \"Tidak ada saldo untuk ditarik\",\n \"Insufficient collateral\": \"Agunan tidak mencukupi\",\n \"No liquidity to withdraw\": \"Tidak ada likuiditas untuk ditarik\",\n \"Health factor too low\": \"Faktor kesehatan terlalu rendah\",\n \"Borrowing limit reached\": \"Batas peminjaman tercapai\",\n \"No liquidity to borrow\": \"Tidak ada likuiditas untuk dipinjam\",\n \"Not enough wallet balance to repay\":\n \"Saldo dompet tidak cukup untuk membayar\",\n \"No borrowed balance to repay\": \"Tidak ada saldo pinjaman untuk dilunasi\",\n \"Enter leverage\": \"Masukkan leverage\",\n \"No balance to loop\": \"Tidak ada keseimbangan untuk diulang\",\n \"Supply Balance\": \"Saldo Pasokan \",\n \"Borrow Balance\": \"Pinjam Saldo \",\n Asset: \"Aset\",\n \"Reward APR\": \"Hadiah APR\",\n \"Interest Rate\": \"Suku bunga \",\n \"Borrow Markets\": \"Pinjam Pasar \",\n \" Penghargaan APR\": \"奖励 APR \",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"Rata-rata tertimbang APY untuk semua aset yang dipasok, termasuk insentif\",\n Supplied: \"Disediakan \",\n \"Supply Markets\": \"Pasar Pasokan \",\n \"Net APY\": \"APY Bersih \",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"APY Bersih adalah efek gabungan dari semua posisi penawaran dan pinjaman pada kekayaan bersih, termasuk insentif. Adalah mungkin untuk memiliki APY bersih negatif jika APY utang lebih tinggi dari APY pasokan.\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"Faktor kesehatan Anda dan nilai pinjaman menentukan jaminan jaminan Anda. Untuk menghindari likuidasi, Anda dapat\",\n \"1. supply more collateral\": \"1. berikan lebih banyak agunan\",\n \"2. repay borrow positions\": \"2. melunasi posisi pinjaman\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"Ketika faktor kesehatan Anda di bawah 1, jaminan Anda akan dilikuidasi.\",\n \"RISK DETAILS\": \"DETAIL RISIKO\",\n Claim: \"Mengeklaim \",\n \"Available SIO2 Rewards\": \"Imbalan SIO2 yang Tersedia\",\n \"Learn more\": \"Belajarlah lagi \",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"Meskipun hadiah SIO2 bertambah setiap menit, nilai pada UI hanya diperbarui saat Anda bertransaksi dengan pasar pasokan dan pinjaman. Oleh karena itu, Anda mungkin menerima lebih banyak hadiah daripada yang ditampilkan saat mengklik 'Klaim'.\",\n Name: \"Nama\",\n Action: \"Aksi\",\n Mint: \"daun mint\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"Untuk mencegah bot spam, faucet testnet kami hanya mengizinkan satu mint per aset per hari untuk setiap pengguna.\",\n \"Total Supplied\": \"Total Disediakan \",\n \"Total Borrowed\": \"Total Dipinjam \",\n \"Supply Reward APR\": \"Hadiah Pasokan APR \",\n \"Borrow Interest Rate\": \"Suku Bunga Pinjaman\",\n \"Borrow Reward APR\": \"Pinjam Hadiah APR \",\n Details: \"rincian\",\n Price: \"Harga\",\n Borrowing: \"Peminjaman \",\n Yes: \"Iya\",\n No: \"Tidak\",\n \"Reserve Factor\": \"Faktor Cadangan \",\n \"Used as Collateral\": \"Digunakan sebagai Jaminan \",\n \"Loan to Value\": \"Pinjaman untuk Nilai \",\n \"Liquidation Threshold\": \"Ambang Likuidasi \",\n \"Liquidation Penalty\": \"Hukuman Likuidasi \",\n \"Market Details\": \"Detail Pasar \",\n \"Asset Pools\": \"Kumpulan Aset \",\n Others: \"Yang lain\",\n total: \"total\",\n \"Top3 Markets\": \"Pasar 3 Teratas \",\n \" total \": \"总共\",\n \"Astar Network\": \"Jaringan Bintang\",\n Token: \"Token\",\n \"SIO2 Token(SIO2)\": \"SIO2 Token(SIO2)\",\n \"Total Raised\": \"Total Dibesarkan \",\n \"Sales Opened\": \"Penjualan Dibuka \",\n TBD: \"tertunda\",\n \"Sales Closed\": \"Penjualan Ditutup \",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"Halaman ini dikembangkan untuk penjualan publik di mainnet, tetapi tidak untuk testnet \",\n \"SIO2 PUBLIC SALE\": \"PENJUALAN UMUM SIO2 \",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n 'Aturan Rilis Token: vesting 2 tahun dengan tebing 6 bulan setelah\\nmeluncurkan\" ',\n Purchase: \"Pembelian \",\n \"Stake SIO2\": \"Mempertaruhkan SIO2\",\n Staking: \"mempertaruhkan \",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"Pemegang SIO2 dapat mempertaruhkan SIO2 mereka di Modul Keamanan untuk menambahkan lebih banyak\\nkeamanan pada protokol dan dapatkan Insentif Keamanan. Dalam hal\\nacara kekurangan, hingga 30% dari taruhan Anda dapat dipotong untuk menutupi\\ndefisit, memberikan lapisan perlindungan tambahan untuk protokol.\",\n \"Total emission per day\": \"Total emisi per hari\",\n \"Claim Rewards\": \"Klaim Hadiah \",\n \"Funds in the Safety Module\": \"Dana dalam Modul Keamanan \",\n \"1 year\": \"1 tahun\",\n \"2 years\": \"2 tahun\",\n \"3 years\": \"3 tahun\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"Jumlah yang Anda coba pertaruhkan melebihi saldo Anda sebesar \",\n [\"0\"],\n \" SIO2\",\n ],\n \"Locked Staking\": \"Taruhan Terkunci \",\n Balance: \"Saldo\",\n \"Duration (years)\": \"Durasi (Tahun)\",\n \"Pool Share\": \"Berbagi Kolam Renang \",\n Confirm: \"Konfirmasi\",\n ID: \"ID\",\n \"Staked Amount\": \"Jumlah yang Dipertaruhkan \",\n \"Weighted Staked Amount\": \"Jumlah Taruhan Tertimbang \",\n \"Date Time\": \"Tanggal Waktu\",\n \"Locked Until\": \"Terkunci Sampai \",\n Redeem: \"Menukarkan\",\n \"Locked Stakes\": \"Taruhan Terkunci \",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"Anda belum memiliki taruhan yang terkunci. Mulailah dengan mengintai token SIO2 Anda.\",\n Summary: \"Summary \",\n \"Staking APR\": \"Mempertaruhkan APR \",\n \"Unweighted Stake\": \"Taruhan Tidak Tertimbang\",\n \"Weighted Stake\": \"Taruhan Tertimbang \",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"監査人\",\n \"Powered by\": \"搭載\",\n \"Please, connect your wallet\": \"ウォレットを接続してください\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"預入、借入、ポジションを見るためにウォレットを接続してください。\",\n \"Connect Wallet\": \"ウォレットを接続する\",\n \"You need to change to a supported chain\":\n \"サポート済みのチェーンに変更する必要があります\",\n \"Please switch the chain with your wallet.\":\n \"ウォレットのチェーンを切り替えてください。\",\n \"Failed to switch the chain\": \"チェーンの切り替えに失敗しました\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"ローカル開発版では、localhost:8545 ネットワークのみ接続可能です。\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2ファイナンスはまだこのネットワークで展開されていません。\",\n \"Please switch to\": \"に切り替えてください\",\n \"Change Network\": \"ネットワークを変更してください\",\n \"Please switch to ~\": \"〜に切り替えてください。\",\n \"No Data\": \"データがありません\",\n Show: \"見せる\",\n Hide: \"隠れる\",\n \"Copy Success\": \"コピー成功\",\n \"No account\": \"アカウントがありません\",\n Network: \"ネットワーク\",\n \"Copy Address\": \"アドレスをコピー\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"ウォレットを切断\",\n Menu: \"メニュー\",\n \"Global Setting\": \"グローバル設定\",\n \"Dark Mode\": \"ダークモード\",\n \"Select Language\": \"言語を選択してください\",\n \"Add Tokens\": \"トークンを追加\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"私たちはSIO2トークンを一般に公開していませんので、SIO2トークンは現在市場価格を持っていません。そのため、推定トークン価格($\",\n [\"SIO2_PRICE\"],\n \")に基づいて APR を計算しています。より詳しい情報は、ドキュメントをご覧ください。\",\n ],\n Borrow: \"借入\",\n Repay: \"返済\",\n Amount: \"金額\",\n Max: \"最大\",\n \"Transaction overview\": \"取引概要\",\n \"Borrow APY\": \"借入APY\",\n \"Borrow APR\": \"借入ボーナスAPR\",\n Borrowed: \"借入残高\",\n \"Borrow Limit Used\": \"借入限度額の使用率\",\n \"Health Factor\": \"ヘルスファクター\",\n Liquidity: \"流動性\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"金利と価格は常に変化しているため、’最大’で最大値を指定しても借入を完全に返済できないことがあります。\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n \"ここでジョシュ! 最初の週は私たちのクリスタル鉱山の「カナリアウィーク」です。 すべての市況に備えるために、ヘルスファクターを4以上に維持することをユーザーに推奨します。 詳細については、<0>記事をお読みください。\",\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n \"ここでジョシュ! 最初の週は私たちのクリスタル鉱山の「カナリアウィーク」です。 すべての市況に備えるために、ヘルスファクターを4以上に維持することをユーザーに推奨します。 詳細については、<0>記事をお読みください。\",\n Collateral: \"担保\",\n ON: \"オン\",\n OFF: \"オフ\",\n Collateral_Amount: \"担保額\",\n \"Borrowed Available\": \"借入限度額\",\n Disable: \"無効にする\",\n Enable: \"有効にする\",\n Deposited: \"残高\",\n Supply: \"預入\",\n Withdraw: \"引出し\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"<1>Algem から <0>ASTR ステーキング報酬を受け取るには、Algem DApp 内の <2>SiO2 アダプター 経由で $nASTR を提供してください。\",\n \"Supply APY\": \"預入APY\",\n \"Supply APR\": \"供給 APR\",\n \"Borrow Available\": \"借入可否\",\n \"This asset can't be used as collateral.\":\n \"この資産は担保として利用できません。\",\n \"Wallet Balance\": \"ウォレット残高\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"取引の確認時に利息が蓄積され続けるため、入力された最大数は、取引が完了したときに獲得した合計を反映していない場合があります\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"利子と残高は常に変動するので、”最大”を指定しても全てのローンを完全に返済することができないかもしれません。\",\n Dashboard: \"ダッシュボード\",\n Market: \"マーケット\",\n Stake: \"ステーク\",\n \"Public Sale\": \"パブリックセール\",\n Faucet: \"フォセット\",\n \"Transaction Preparing\": \"トランザクションの準備\",\n \"Waiting for transaction to be ready...\":\n \"トランザクションの準備が整うのを待っています...\",\n \"Confirm Transaction\": \"トランザクションの確認\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"ERC-20アセットをプールに送信することを承認します。\",\n \"Transaction Pending\": \"トランザクション保留中\",\n \"Waiting for the transaction to be confirmed...\":\n \"トランザクションが確認されるのを待っています...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"クレジットでERC-20資産を借りる契約を承認します。\",\n \"Confirm the transaction.\": \"トランザクションを確認してください。\",\n \"Transaction Submitted\": \"送信されたトランザクション\",\n \"Succeeded!\": \"成功しました!\",\n \"Your transaction confirmed!\": \"取引が確認されました!\",\n \"Transaction Canceled\": \"トランザクションがキャンセルされました\",\n \"You have canceled the transaction.\": \"取引をキャンセルしました。\",\n Error: \"エラー\",\n \"Enter amount\": \"金額を入力してください\",\n \"No balance to deposit\": \"入金する残高がありません\",\n \"No balance to withdraw\": \"引き出す残高がありません\",\n \"Insufficient collateral\": \"不十分な担保\",\n \"No liquidity to withdraw\": \"撤回する流動性がない\",\n \"Health factor too low\": \"ヘルスファクターが低すぎます\",\n \"Borrowing limit reached\": \"借入限度額に達しました\",\n \"No liquidity to borrow\": \"借りる流動性がない\",\n \"Not enough wallet balance to repay\":\n \"返済するのに十分なウォレット残高がありません\",\n \"No borrowed balance to repay\": \"返済する借入残高がありません\",\n \"Enter leverage\": \"レバレッジを入力してください\",\n \"No balance to loop\": \"ループするバランスがありません\",\n \"Supply Balance\": \"預入残高\",\n \"Borrow Balance\": \"借入残高\",\n Asset: \"資産\",\n \"Reward APR\": \"ボーナスAPR\",\n \"Interest Rate\": \"金利\",\n \"Borrow Markets\": \"借入一覧\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"預入資産とインセンティブの加重平均APY\",\n Supplied: \"預入残高\",\n \"Supply Markets\": \"預入一覧\",\n \"Net APY\": \"純利回り\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"純利回りは預入,借入,利子を総合して算出した利回りです。借入のAPYが預入のAPYを超える場合、純利回りがマイナスになります。\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"ヘルスファクターとLTVが担保の安全度を決めます。清算を避けるためには、以下の方法があります。\",\n \"1. supply more collateral\": \"1. 担保を追加する\",\n \"2. repay borrow positions\": \"2. 借入を返済する\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"ヘルスファクターが1を下回ると、あなたの担保は清算されます。\",\n \"RISK DETAILS\": \"リスク詳細\",\n Claim: \"受取\",\n \"Available SIO2 Rewards\": \"受取可能なSIO2報酬\",\n \"Learn more\": \"もっと詳しく\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"SIO2の報酬は1分ごとに発生しますが、UI上の数値は預入・借入の取引時にのみ更新されます。そのため、'受取'をクリックしたときに表示されるよりも多くの報酬を受け取ることができます。\",\n Name: \"名前I think this word “Name” is too abstract.\",\n Action: \"行動I think this word “Action” is too abstract.\",\n Mint: \"ミント\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"スパムやBotを防止するため、テストネットでは各ユーザはアセット毎に1日1回までフォセットを利用することができます。\",\n \"Total Supplied\": \"預入総額\",\n \"Total Borrowed\": \"借入総額\",\n \"Supply Reward APR\": \"預入ボーナスAPR\",\n \"Borrow Interest Rate\": \"金利を借りる\",\n \"Borrow Reward APR\": \"借入ボーナスAPR\",\n Details: \"詳細\",\n Price: \"価格\",\n Borrowing: \"借入可否\",\n Yes: \"可\",\n No: \"不可\",\n \"Reserve Factor\": \"リザーブファクター\",\n \"Used as Collateral\": \"担保利用可否\",\n \"Loan to Value\": \"LTV\",\n \"Liquidation Threshold\": \"清算閾値\",\n \"Liquidation Penalty\": \"清算ペナルティ\",\n \"Market Details\": \"マーケット詳細\",\n \"Asset Pools\": \"資産プール\",\n Others: \"その他\",\n total: \"総額\",\n \"Top3 Markets\": \"トップ3市場\",\n \"Astar Network\": \"アスターネットワーク\",\n Token: \"トークン\",\n \"SIO2 Token(SIO2)\": \"SIO2 トークン(SIO2)\",\n \"Total Raised\": \"調達額合計\",\n \"Sales Opened\": \"販売開始\",\n TBD: \"未定\",\n \"Sales Closed\": \"販売終了\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"このページはテストネット上ではなく、メインネット上でのパブリックセール用に作成しています。\",\n \"SIO2 PUBLIC SALE\": \"SIO2パブリックセール\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"トークンの配布ルール: ローンチ後6ヶ月の期間の後,2年かけて分配されます\",\n Purchase: \"購入\",\n \"Stake SIO2\": \"SIO2をステークする\",\n Staking: \"ステーキング\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2保有者は、SIO2をセーフティ・モジュールにステークして、プロトコルにセキュリティを追加し、セーフティ・インセンティブを獲得することができます。SIO2が不足した場合、最大で出資額の30%が削減され、不足分を補うことができます。プロトコルを保護するための追加的なレイヤーを提供します。\",\n \"Total emission per day\": \"1日あたりの総排出量\",\n \"Claim Rewards\": \"報酬を受取る\",\n \"Funds in the Safety Module\": \"セーフティ・モジュール内の資産\",\n \"1 year\": \"1年\",\n \"2 years\": \"2年\",\n \"3 years\": \"3年\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\":\n \"ステーキング量が残高を超過しています\",\n \"Locked Staking\": \"ロック済ステーキング\",\n Balance: \"価格\",\n \"Duration (years)\": \"期間(年)\",\n \"Pool Share\": \"プールシェア率\",\n Confirm: \"確認\",\n ID: \"ID\",\n \"Staked Amount\": \"ステーキング額\",\n \"Weighted Staked Amount\": \"重み付きステーキング額\",\n \"Date Time\": \"日付時刻\",\n \"Locked Until\": \"ロック期限\",\n Redeem: \"償還\",\n \"Locked Stakes\": \"ロック済ステーキング\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"ロック済のステーキングはまだありません。SIO2トークンをステークしましょう。\",\n Summary: \"概要\",\n \"Staking APR\": \"ステーキングAPR\",\n \"Unweighted Stake\": \"ステーキング量\",\n \"Weighted Stake\": \"重み付きステーキング量\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"감사 대상\",\n \"Powered by\": \"에 의해 구동\",\n \"Please, connect your wallet\": \"지갑을 연결해주세요\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"지갑을 연결하여 소모품, 차입금, 오픈 포지션을 확인하세요.\",\n \"Connect Wallet\": \"지갑 연결\",\n \"You need to change to a supported chain\":\n \"지원되는 체인으로 변경해야 합니다.\",\n \"Please switch the chain with your wallet.\": \"지갑으로 체인을 바꿔주세요.\",\n \"Failed to switch the chain\": \"체인 전환 실패\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"로컬 개발 모드에서는 localhost:8545 네트워크만 연결할 수 있습니다\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2 Finance는 아직 이 네트워크에 배포되지 않았습니다.\",\n \"Please switch to\": \"로 전환하십시오\",\n \"Change Network\": \"네트워크 변경\",\n \"No Data\": \"데이터 없음\",\n Show: \"보여 주다\",\n Hide: \"숨다\",\n \"Copy Success\": \"복사 성공\",\n \"No account\": \"계정 없음\",\n Network: \"회로망\",\n \"Copy Address\": \"주소 복사\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"지갑 연결 해제\",\n Menu: \"메뉴\",\n \"Global Setting\": \"글로벌 설정\",\n \"Dark Mode\": \"다크 모드\",\n \"Select Language\": \"언어 선택\",\n \"Add Tokens\": \"토큰 추가\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"우리는 SIO2 토큰을 공개적으로 출시하지 않았으므로 SIO2 토큰은 현재 시장 가격이 없습니다. 따라서 예상 토큰 가격 $ \",\n [\"SIO2_PRICE\"],\n \"을 기준으로 APR을 계산합니다. 자세한 내용은 설명서를 참조하십시오.\",\n ],\n Borrow: \"빌리다\",\n Repay: \"갚다\",\n Amount: \"양\",\n Max: \"최대\",\n \"Transaction overview\": \"거래 개요\",\n \"Borrow APY\": \"APY를 빌리다\",\n \"Borrow APR\": \"두르다 APR\",\n Borrowed: \"빌린\",\n \"Borrow Limit Used\": \"사용된 차용 한도\",\n \"Health Factor\": \"건강 요인\",\n Liquidity: \"유동성\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"이자 및 가치는 항상 변동하기 때문에 최대값의 최대값은 모든 대출을 완전히 갚지 못할 수 있습니다.\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n '여기 조쉬! 첫 번째 주는 크리스탈 광산의 \"Canary Week\"입니다. 모든 시장 상황에 대비하기 위해 사용자가 4보다 큰 상태를 유지하도록 권장합니다. 자세한 내용은 <0>문서를 읽어보세요.',\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n '여기 조쉬! 첫 번째 주는 크리스탈 광산의 \"카나리아 주간\"입니다. 우리는 사용자가 모든 시장 상황에 대비하기 위해 건강 요소> 4를 유지하도록 권장합니다. 자세한 내용은 <0>문서를 읽어보세요.',\n Collateral: \"서로 나란한\",\n ON: \"켜짐\",\n OFF: \"끄다\",\n Collateral_Amount: \"담보 금액\",\n \"Borrowed Available\": \"대출 가능\",\n Disable: \"장애를 입히다\",\n Enable: \"할 수 있게 하다\",\n Deposited: \"예치\",\n Supply: \"공급\",\n Withdraw: \"철회하다\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"<1>Algem으로부터 <0>ASTR 스테이킹 보상을 받으려면 Algem DApp 내의 <2>SiO2 어댑터를 통해 $nASTR을 공급하세요.\",\n \"Supply APY\": \"APY 공급\",\n \"Supply APR\": \"공급 APR\",\n \"Borrow Available\": \"대출 가능\",\n \"This asset can't be used as collateral.\":\n \"이 자산은 담보로 사용할 수 없습니다.\",\n \"Wallet Balance\": \"지갑 잔액\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"거래 확인 시 이자가 계속 누적되므로 입력한 최대 수는 거래 완료 시 적립된 총 금액을 반영하지 않을 수 있습니다.\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"이자 및 가치는 수시로 변동하기 때문에 최대\\n값은 모든 예금을 완전히 제거하지 못할 수 있습니다\",\n Dashboard: \"계기반\",\n Market: \"시장\",\n Stake: \"말뚝\",\n \"Public Sale\": \"공개 판매\",\n Faucet: \"수도꼭지\",\n \"Transaction Preparing\": \"거래 준비 중\",\n \"Waiting for transaction to be ready...\":\n \"거래가 준비되기를 기다리는 중...\",\n \"Confirm Transaction\": \"트랜잭션 확인\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"ERC-20 자산을 풀로 보내는 것을 승인합니다.\",\n \"Transaction Pending\": \"트랜잭션 보류 중\",\n \"Waiting for the transaction to be confirmed...\":\n \"트랜잭션 확인을 기다리는 중...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"당신의 신용으로 ERC-20 자산을 빌리는 계약을 승인하십시오.\",\n \"Confirm the transaction.\": \"트랜잭션 확인.\",\n \"Transaction Submitted\": \"제출된 거래\",\n \"Succeeded!\": \"성공!\",\n \"Your transaction confirmed!\": \"거래가 확인되었습니다!\",\n \"Transaction Canceled\": \"거래 취소됨\",\n \"You have canceled the transaction.\": \"거래를 취소했습니다.\",\n Error: \"오류\",\n \"Enter amount\": \"금액 입력\",\n \"No balance to deposit\": \"예금할 잔액이 없습니다\",\n \"No balance to withdraw\": \"인출할 잔액이 없습니다\",\n \"Insufficient collateral\": \"충분하지 않은 담보\",\n \"No liquidity to withdraw\": \"인출할 유동성이 없습니다\",\n \"Health factor too low\": \"상태 요소가 너무 낮습니다\",\n \"Borrowing limit reached\": \"대출 한도에 도달했습니다\",\n \"No liquidity to borrow\": \"차입할 유동성이 없습니다\",\n \"Not enough wallet balance to repay\":\n \"상환할 지갑 잔액이 충분하지 않습니다\",\n \"No borrowed balance to repay\": \"상환할 차입 잔액이 없습니다\",\n \"Enter leverage\": \"레버리지 입력\",\n \"No balance to loop\": \"루프할 균형이 없습니다\",\n \"Supply Balance\": \"공급 균형\",\n \"Borrow Balance\": \"차입 잔액\",\n Asset: \"유산\",\n \"Reward APR\": \"보상 APR\",\n \"Interest Rate\": \"이자율\",\n \"Borrow Markets\": \"차용 시장\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"센티브를 포함한 모든 공급 자산에 대한 APY의 가중 평균\",\n Supplied: \"공급\",\n \"Supply Markets\": \"공급 시장\",\n \"Net APY\": \"순 APY\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"순 APY는 인센티브를 포함하여 순자산에 대한 모든 공급 및 차입 포지션의 결합된 효과입니다. 부채 APY가 공급 APY보다 높으면 순 APY가 음수일 수 있습니다.\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"귀하의 건강 요소와 가치에 대한 대출은 귀하의 담보 보장을 결정합니다. 청산을 피하기 위해 다음을 수행할 수 있습니다.\",\n \"1. supply more collateral\": \"1. 더 많은 담보 제공\",\n \"2. repay borrow positions\": \"2. 차입금 상환\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"건강 계수가 1 미만이면 담보가 청산됩니다.\",\n \"RISK DETAILS\": \"위험 세부 정보\",\n Claim: \"주장하다\",\n \"Available SIO2 Rewards\": \"사용 가능한 SIO2 보상\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"SIO2 보상은 매분 발생하지만 UI의 값은 공급 및 차입 시장과 거래할 때만 업데이트됩니다. 따라서 '클레임'을 클릭할 때 표시되는 것보다 더 많은 보상을 받을 수 있습니다.\",\n \"Learn more\": \"더 알아보기\",\n Name: \"이름\",\n Action: \"동작\",\n Mint: \"민트\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"스팸 봇을 방지하기 위해 테스트넷 수도꼭지는 각 사용자에 대해 자산당 하루에 하나의 민트만 허용합니다.\",\n \"Total Supplied\": \"총 공급\",\n \"Total Borrowed\": \"총 차입금\",\n \"Supply Reward APR\": \"보상 APR 공급\",\n \"Borrow Interest Rate\": \"대출금리\",\n \"Borrow Reward APR\": \"보상 4월 빌리기\",\n Details: \"세부\",\n Price: \"가격\",\n Borrowing: \"차용\",\n Yes: \"예\",\n No: \"아니요\",\n \"Reserve Factor\": \"리저브 팩터\",\n \"Used as Collateral\": \"담보로 사용\",\n \"Loan to Value\": \"가치에 대한 대출\",\n \"Liquidation Threshold\": \"청산 기준\",\n \"Liquidation Penalty\": \"청산 패널티\",\n \"Market Details\": \"시장 세부 정보\",\n \"Asset Pools\": \"자산 풀\",\n Detail: \"세부 사항\",\n Others: \"기타\",\n total: \"합계\",\n \"Top3 Markets\": \"상위 3개 시장\",\n \"Astar Network\": \"아스타네트워크\",\n Token: \"토큰\",\n \"SIO2 Token(SIO2)\": \"SIO2 토큰(SIO2)\",\n \"Total Raised\": \"모금\",\n \"Sales Opened\": \"판매 개시\",\n TBD: \"보류 중\",\n \"Sales Closed\": \"영업 종료\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"이 페이지는 테스트넷이 아닌 메인넷에서 공개 판매를 위해 개발되었습니다.\",\n \"SIO2 PUBLIC SALE\": \"SIO2 공개 판매\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"토큰 출시 규칙: 출시 후 6개월 벼랑과 함께 2년 베스팅\",\n Purchase: \"구입\",\n \"$ {0}\": [\"$ \", [\"0\"]],\n \"Stake SIO2\": \"스테이킹 SIO2\",\n Staking: \"스테이크\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2 보유자는 SIO2를 안전 모듈에 스테이킹하여 프로토콜에 보안을 추가하고 안전 인센티브를 받을 수 있습니다. 부족 이벤트의 경우, 적자를 충당하기 위해 지분의 최대 30%를 삭감하여 프로토콜에 대한 추가 보호 계층을 제공할 수 있습니다.\",\n \"Total emission per day\": \"하루 총 배출량\",\n \"Claim Rewards\": \"보상 청구\",\n \"Funds in the Safety Module\": \"안전 모듈의 자금\",\n \"1 year\": \"1 년\",\n \"2 years\": \"2 년\",\n \"3 years\": \"3 년\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"스테이킹하려는 금액이 귀하의 잔액을 \",\n [\"0\"],\n \" SIO2 초과합니다.\",\n ],\n \"Locked Staking\": \"고정 스테이킹\",\n Balance: \"균형\",\n \"Duration (years)\": \"기간(년)\",\n \"Pool Share\": \"풀 쉐어\",\n Confirm: \"확인하다\",\n ID: \"ID\",\n \"Staked Amount\": \"스테이킹 금액\",\n \"Weighted Staked Amount\": \"가중 스테이킹 금액\",\n \"Date Time\": \"날짜 시간\",\n \"Locked Until\": \"까지 잠김\",\n Redeem: \"상환하다\",\n \"Locked Stakes\": \"잠긴 지분\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"아직 잠긴 지분이 없습니다. SIO2 토큰을 스테이킹하여 시작하십시오.\",\n Summary: \"요약\",\n \"Staking APR\": \"스테이킹 APR\",\n \"Unweighted Stake\": \"가중되지 않은 지분\",\n \"Weighted Stake\": \"가중 지분\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"Проверено\",\n \"Powered by\": \"Питаться от\",\n \"Please, connect your wallet\": \"Пожалуйста,подключите свой кошелёк\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"Пожалуйста, подключите свой кошелек, чтобы увидеть свои запасы, займы и открытые позиции\",\n \"Connect Wallet\": \"Подключите кошелек\",\n \"You need to change to a supported chain\":\n \"Вам нужно перейти на поддерживаемую цепочку\",\n \"Please switch the chain with your wallet.\":\n \"Пожалуйста, поменяйте цепочку своим кошельком\",\n \"Failed to switch the chain\": \"Не удалось переключить цепочку\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"В режиме локального разработчика можно подключить только сеть localhost:8545\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"«SiO2 Finance еще не развернут в этой сети\",\n \"Please switch to\": \"Пожалуйста, переключитесь на\",\n \"Change Network\": \"Сменить сеть\",\n \"No Data\": \"Нет данных\",\n Show: \"показывать\",\n Hide: \"Спрятать\",\n \"Copy Success\": \"Копия успешна\",\n \"No account\": \"Нет акаунта\",\n Network: \"Сеть\",\n \"Copy Address\": \"Копирование адреса\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"Отключить кошелёк\",\n Menu: \"Меню\",\n \"Global Setting\": \"Глобальные настройки\",\n \"Dark Mode\": \"Темный режим\",\n \"Select Language\": \"Изменить язык\",\n \"Add Tokens\": \"Добавить токены\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"msgstrМы не запускали токен SIO2 публично, поэтому у токена SIO2 нет рынка\\nЦена прямо сейчас. Поэтому мы рассчитываем APR на основе предполагаемой цены токена, $\\n\",\n [\"SIO2_PRICE\"],\n \". Дополнительную информацию см. в нашей документации\",\n ],\n Borrow: \"Занять\",\n Repay: \"Погашать\",\n Amount: \"Количество\",\n Max: \"Максимум\",\n \"Transaction overview\": \"Обзор сделки\",\n \"Borrow APY\": \"Занять APY\",\n \"Borrow APR\": \"Занять APR\",\n Borrowed: \"Заимствовать\",\n \"Borrow Limit Used\": \"Использован лимит заимствования\",\n \"Health Factor\": \"Фактор здоровья\",\n Liquidity: \"Ликвидность\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"Поскольку проценты и стоимость все время колеблются, максимальное значение\\n«Максимум может быть не в состоянии полностью погасить все кредиты»\",\n Collateral: \"Залог\",\n ON: \"НА\",\n OFF: \"ВЫКЛЮЧЕННЫЙ\",\n Collateral_Amount: \"Залог_Сума\",\n \"Borrowed Available\": \"Заемные доступные\",\n Disable: \"Запрещать\",\n Enable: \"Включить\",\n Deposited: \"Депозит\",\n Supply: \"Ставка\",\n Withdraw: \"Выводить\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"Чтобы получить <0>вознаграждения за стейкинг ASTR от <1>Algem, укажите свой $nASTR через <2>адаптер SiO2 в приложении Algem DApp.\",\n \"Supply APY\": \"Ставка\",\n \"Supply APR\": \"Ставка APR\",\n \"Borrow Available\": \"Доступный кредит\",\n \"This asset can't be used as collateral.\":\n \"Этот актив не может быть использован в качестве залога\",\n \"Wallet Balance\": \"Баланс кошелька\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"Поскольку проценты будут продолжать накапливаться при подтверждении транзакции, введенное максимальное число может не отражать общую сумму, которую вы заработали после завершения транзакции.\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"Поскольку проценты и стоимость время от времени колеблются, max\\nзначение не может полностью удалить все депозиты\",\n Dashboard: \"Панель\",\n Market: \"Рынок\",\n Stake: \"Ставка\",\n \"Public Sale\": \"Публична продажа\",\n Faucet: \"Кран\",\n \"Transaction Preparing\": \"Подготовка сделки\",\n \"Waiting for transaction to be ready...\":\n \"Ожидание готовности транзакции...\",\n \"Confirm Transaction\": \"Подтвердить транзакцию\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"Подтвердите отправку актива ERC-20 в пул.\",\n \"Transaction Pending\": \"Ожидание транзакции\",\n \"Waiting for the transaction to be confirmed...\":\n \"Ожидание подтверждения транзакции...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"Утвердить договор о заимствовании активов ERC-20 в ваш кредит.\",\n \"Confirm the transaction.\": \"Подтвердите транзакцию.\",\n \"Transaction Submitted\": \"Транзакция отправлена\",\n \"Succeeded!\": \"Успешно\",\n \"Your transaction confirmed!\": \"Ваша транзакция подтверждена!\",\n \"Transaction Canceled\": \"Транзакция отменена\",\n \"You have canceled the transaction.\": \"Вы отменили транзакцию.\",\n Error: \"Ошибка\",\n \"Enter amount\": \"Введите сумму\",\n \"No balance to deposit\": \"Нет баланса для депозита\",\n \"No balance to withdraw\": \"Нет баланса для вывода\",\n \"Insufficient collateral\": \"Недостаточный залог\",\n \"No liquidity to withdraw\": \"Нет ликвидности для вывода\",\n \"Health factor too low\": \"Коэффициент здоровья слишком низкий\",\n \"Borrowing limit reached\": \"Достигнут лимит займа\",\n \"No liquidity to borrow\": \"Нет ликвидности для заимствования\",\n \"Not enough wallet balance to repay\":\n \"Недостаточно средств на кошельке для погашения\",\n \"No borrowed balance to repay\": \"Нет заемного остатка для погашения\",\n \"Enter leverage\": \"Введите кредитное плечо\",\n \"No balance to loop\": \"Нет баланса для цикла\",\n \"Supply Balance\": \"Баланс поставок \",\n \"Borrow Balance\": \"Занять баланс\",\n Asset: \"Актив\",\n \"Reward APR\": \"Награды APR ( годовых)\",\n \"Interest Rate\": \"Процентная Ставка\",\n \"Borrow Markets\": \"Рынки взаимствований\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"Средневзвешенное значение APY для всех предоставленных активов, включая поощрения\",\n Supplied: \"Поставленный\",\n \"Supply Markets\": \"Рынки предложений\",\n \"Net APY\": \"Чистая APY”( чистая годовая ставка)\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"Чистая годовая доходность представляет собой комбинированный эффект всех позиций предложения и займа на чистую стоимость активов, включая льготы. Можно иметь отрицательную чистую APY, если долг APY выше, чем APY предложения\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"Фактор вашего здоровья и стоимость кредита определяют гарантию вашего залога. Избежать ликвидации можно\",\n \"1. supply more collateral\": \"1. предоставить больше залога\",\n \"2. repay borrow positions\": \"2. погасить занимаемые позиции\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"«Когда ваш коэффициент здоровья ниже 1, ваш залог будет ликвидирован\",\n \"RISK DETAILS\": \"Детали риска\",\n Claim: \"Утверждать\",\n \"Available SIO2 Rewards\": \"Доступные награды SIO2\",\n \"Learn more\": \"Учить больше \",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"Хотя вознаграждения SIO2 начисляются каждую минуту, значение в пользовательском интерфейсе обновляется только тогда, когда вы совершаете операции на рынках предложения и заимствования. Поэтому вы можете получить больше вознаграждений, чем отображается при нажатии «Получить\",\n Name: \"Имя\",\n Action: \"Действие\",\n Mint: \"Монетный двор\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"Чтобы предотвратить спам-ботов, наш кран тестовой сети разрешает только один монетный двор для каждого актива в день для каждого пользователя\",\n \"Total Supplied\": \"Всего поставлено\",\n \"Total Borrowed\": \"Всего заимствовано\",\n \"Supply Reward APR\": \"Вознаграждение за ставку в год APR\",\n \"Borrow Interest Rate\": \"Процентная ставка по кредиту\",\n \"Borrow Reward APR\": \"Вознаграждение зал займу в год APR\",\n Details: \"Подробности\",\n Price: \"Цена\",\n Borrowing: \"Взаимствование\",\n Yes: \"Да\",\n No: \"Нет\",\n \"Reserve Factor\": \"Резервный фактор\",\n \"Used as Collateral\": \"Используется в качестве залога\",\n \"Loan to Value\": \"Кредит на стоимость\",\n \"Liquidation Threshold\": \"Порог ликвидации\",\n \"Liquidation Penalty\": \"Штраф за ликвидацию\",\n \"Market Details\": \"Детали рынка\",\n \"Asset Pools\": \"Пулы активов\",\n Others: \"Другие\",\n total: \"Общий\",\n \"Top3 Markets\": \"Топ 3 ринка\",\n \"Astar Network\": \"Астар Сеть\",\n Token: \"Токен\",\n \"SIO2 Token(SIO2)\": \"SIO2 Токен(SIO2)\",\n \"Total Raised\": \"Всего собрано\",\n \"Sales Opened\": \"Продажи открыты\",\n TBD: \"подлежит уточнению\",\n \"Sales Closed\": \"Продажи закрыты\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"Эта страница разработана для публичной продажи в основной сети, но не в тестовой сети\",\n \"SIO2 PUBLIC SALE\": \"Публичная продажа Sio2\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"Правила выпуска токенов: 2 года наделения правами с 6-месячным обрывом после\\nзапуск\",\n Purchase: \"Покупка\",\n \"Stake SIO2\": \"Ставка Sio2\",\n Staking: \"Ставка\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"Владельцы SIO2 могут поставить свои SIO2 в модуль безопасности, чтобы добавить больше\\nбезопасность протокола и получать поощрения за безопасность. В случае\\nсобытие дефицита, до 30% вашей ставки может быть урезано, чтобы покрыть\\n«дефицит, обеспечивающий дополнительный уровень защиты протокола\",\n \"Total emission per day\": \"Общий выброс в день\",\n \"Claim Rewards\": \"Получить награды\",\n \"Funds in the Safety Module\": \"Средства в модуле безопасности\",\n \"1 year\": \"1 год\",\n \"2 years\": \"2 года\",\n \"3 years\": \"3 года\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"Сумма, которую вы пытаетесь поставить, превышает ваш баланс на \",\n [\"0\"],\n \" SIO2\",\n ],\n \"Locked Staking\": \"Заблокированный стейкинг\",\n Balance: \"Балаес\",\n \"Duration (years)\": \"Продолжительность (лет)\",\n \"Pool Share\": \"Общий бассейн\",\n Confirm: \"Подтверждать\",\n L: \"Заблокированные средства\",\n ID: \"ID\",\n \"Staked Amount\": \"Сумма ставки\",\n \"Weighted Staked Amount\": \"Взвешенная сумма ставок\",\n \"Date Time\": \"Дата Время\",\n \"Locked Until\": \"Заблокировано до\",\n Redeem: \"Выкупать\",\n \"Locked Stakes\": \"Закрытые ставки\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"«У вас еще нет заблокированных ставок. Начните с размещения ваших токенов SIO2\",\n \"Stake locket\": \"Заблокированная Ставка\",\n Summary: \"Резюме\",\n \"Staking APR\": \"Годовая Ставка\",\n \"Unweighted Stake\": \"Невзвешенная Ставка\",\n \"Weighted Stake\": \"Взвещеная Ставка\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"Denetleyen\",\n \"Powered by\": \"Tarafından desteklenmektedir\",\n \"Please, connect your wallet\": \"Lütfen cüzdanınızı bağlayın\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n ' Mevcut ürünlerinizi, borçlarınızı ve açık pozisyonlarınızı görmek için lütfen cüzdanınızı bağlayın.\"',\n \"Connect Wallet\": \"Cüzdanınızı bağlayın\",\n \"You need to change to a supported chain\":\n \"Desteklenen bir zincire geçmeniz gerekiyor\",\n \"Please switch the chain with your wallet.\": \"Lütfen ağınızı değiştirin\",\n \"Failed to switch the chain\": \"Zincir değiştirilemedi \",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"Yerel geliştirici modunda, yalnızca localhost:8545 ağı bağlanabilir\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2 Finance henüz bu ağda çalışmamaktadır\",\n \"Please switch to\": \"Lütfen geçiş yapın\",\n \"Change Network\": \"Ağınızı değiştirin\",\n \"No Data\": \"Data yok\",\n Show: \"Göstermek\",\n Hide: \"Saklamak\",\n \"Copy Success\": \"Kopyalama başarılır\",\n \"No account\": \"Hesap yok\",\n Network: \"Ağ\",\n \"Copy Address\": \"Adresi Kopyala\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"Cüzdanının bağlantısını kesin\",\n Menu: \"Menü\",\n \"Global Setting\": \"Global ayarlar\",\n \"Dark Mode\": \"Karanlık mod\",\n \"Select Language\": \"Dilinizi seçin\",\n \"Add Tokens\": \"Token’i ekleyin\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"SIO2 jetonunu herkese açık olarak piyasaya sürmedik, bu nedenle SIO2 jetonunun bir pazarı yok\\nşu anda fiyat. Bu nedenle, APR'yi tahmini jeton fiyatına, $\\n'ye göre hesaplıyoruz\",\n [\"SIO2_PRICE\"],\n \". Daha fazla bilgi için lütfen belgelerimizi ziyaret edin.\",\n ],\n Borrow: \"Ödünç Al\",\n Repay: \"Geri Öde\",\n Amount: \"Miktar\",\n Max: \"Maksimum\",\n \"Transaction overview\": \"İşlemlere genel bakış\",\n \"Borrow APY\": \"Ödünç alma APY’si\",\n \"Borrow APR\": \"Ödünç alma APR’si \",\n Borrowed: \"Ödünç alındı\",\n \"Borrow Limit Used\": \"Kullanılan Ödünç Alma Sınırına Ulaşılmadı\",\n \"Health Factor\": \"Sağlık Faktörünüz\",\n Liquidity: \"Likidite\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"Faiz ve değer sürekli dalgalandığından, maksimum değer\\nmaks, almış olduğunuz tüm kredileri tam olarak ödeyemeyebilir \",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n \"Josh burada! İlk hafta kristal madenimizin 'Kanarya Haftası'dır. Kullanıcıları, tüm piyasa koşullarına hazırlanmak için > 4 sağlık faktörünü korumaya teşvik ediyoruz. Daha fazla ayrıntı için <0>makaleyi okuyun.\",\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh burada! İlk hafta kristal madenimizin \"Kanarya Haftası\"dır. Kullanıcıları, tüm piyasa koşullarına hazırlanmak için> 4 sağlık faktörünü korumaya teşvik ediyoruz. Daha fazla ayrıntı için <0>makaleyi okuyun.',\n Collateral: \"Teminat\",\n ON: \"ÜZERİNDE\",\n OFF: \"KAPALI\",\n Collateral_Amount: \"Teminat Miktarı\",\n \"Borrowed Available\": \"Alınabilir Borç\",\n Disable: \"Devre dışı bırak\",\n Enable: \"Aktif et\",\n Deposited: \"Yatırıldı\",\n Supply: \"Arz\",\n Withdraw: \"Çek\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"<1>Algem'den <0>ASTR staking ödüllerini almak için lütfen $nASTR'nizi Algem DApp içindeki <2>SiO2 adaptörü aracılığıyla sağlayın.\",\n \"Supply APY\": \"Arzın APY’si\",\n \"Supply APR\": \"Arzın APRsi\",\n \"Borrow Available\": 'Ödünç Alınabilir\"',\n \"This asset can't be used as collateral.\":\n \"Bu ürün teminat olarak kullanılamaz\",\n \"Wallet Balance\": \"Cüzdan Bakiyesi\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"İşlem onaylanırken faiz birikmeye devam edeceğinden, girilen maksimum sayı, işlem tamamlandığında kazandığınız toplamı yansıtmayabilir.\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n '\"Faiz ve değer zaman zaman dalgalandığından, max\\ndeğer tüm mevduatları tamamen ortadan kaldıramayabilir\"',\n Dashboard: \"Gösterge Paneli\",\n Market: \"Piyasa\",\n Stake: \"Stake\",\n \"Public Sale\": \"Halka açık satış\",\n Faucet: \"Musluk\",\n \"Transaction Preparing\": \"İşlem Hazırlama\",\n \"Waiting for transaction to be ready...\":\n \"İşlemin hazır olması bekleniyor...\",\n \"Confirm Transaction\": \"İşlemi Onayla\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"ERC-20 varlığının havuza gönderilmesini onaylayın.\",\n \"Transaction Pending\": \"İşlem Beklemede\",\n \"Waiting for the transaction to be confirmed...\":\n \"İşlemin onaylanmasını bekliyorum...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"Kredinizle ERC-20 varlıklarını ödünç almak için sözleşmeyi onaylayın.\",\n \"Confirm the transaction.\": \"İşlemi onaylayın.\",\n \"Transaction Submitted\": \"İşlem Gönderildi\",\n \"Succeeded!\": \"Başarılı!\",\n \"Your transaction confirmed!\": \"İşleminiz onaylandı!\",\n \"Transaction Canceled\": \"İşlem İptal Edildi\",\n \"You have canceled the transaction.\": \"İşlemi iptal ettiniz.\",\n Error: \"Hata\",\n \"Enter amount\": \"Miktarı girin\",\n \"No balance to deposit\": \"Yatırılacak bakiye yok\",\n \"No balance to withdraw\": \"Çekilecek bakiye yok\",\n \"Insufficient collateral\": \"Yetersiz teminat\",\n \"No liquidity to withdraw\": \"Çekilecek likidite yok\",\n \"Health factor too low\": \"Çekilecek likidite yok\",\n \"Borrowing limit reached\": \"Borçlanma limitine ulaşıldı\",\n \"No liquidity to borrow\": \"Borçlanacak likidite yok\",\n \"Not enough wallet balance to repay\":\n \"Geri ödemek için yeterli cüzdan bakiyesi yok\",\n \"No borrowed balance to repay\": \"Geri ödenecek borç bakiyesi yok\",\n \"Enter leverage\": \"Kaldıraç girin\",\n \"No balance to loop\": \"Döngü için bakiye yok\",\n \"Supply Balance\": \"Arz Bakiyesi\",\n \"Borrow Balance\": \"Borç Bakiyesi\",\n Asset: \"Varlık\",\n \"Reward APR\": \"Ödül APR’si\",\n \"Interest Rate\": \"Faiz Oranı\",\n \"Borrow Markets\": \"Borç alma piyassaları\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"Teşvikler dahil, sağlanan tüm varlıklar için APY'nin ağırlıklı ortalaması\",\n Supplied: \"Sağlanan Arz\",\n \"Supply Markets\": \"Arz Piyasaları\",\n \"Net APY\": \"Net APY\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"Net APY, teşvikler de dahil olmak üzere, tüm arz ve borçlanma pozisyonlarının net değer üzerindeki birleşik etkisidir. Borç APY'si arz APY'sinden yüksekse, negatif bir net APY'ye sahip olmak mümkündür.\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"Sağlık faktörünüz ve değer krediniz teminatınızın güvencesini belirler. Tasfiyeleri önlemek için kontrol edebilirsiniz\",\n \"1. supply more collateral\": \"1. daha fazla teminat sağlayın\",\n \"2. repay borrow positions\": \"2. ödünç alma pozisyonlarını geri ödeyin \",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"Sağlık faktörünüz 1'in altına düştüğünde teminatınız nakde çevrilecektir.\",\n \"RISK DETAILS\": \"Risk Detayları\",\n Claim: \"Claim\",\n \"Available SIO2 Rewards\": \"Mevcut SİO2 Ödülleri\",\n \"Learn more\": \"Fazlasını öğren\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \" SIO2 ödülleri her dakika tahakkuk etse de, kullanıcı arayüzündeki değer yalnızca arz ve borçlanma piyasalarıyla işlem yaptığınızda güncellenir. Bu nedenle, 'Claim' seçeneğine tıkladığınızda görüntülenenden daha fazla ödül alabilirsiniz\",\n Name: \"İsim\",\n Action: \"Eylem\",\n Mint: \"nane\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"Spam botları önlemek için testnet musluğumuz, her kullanıcı için varlık başına günde yalnızca bir mint yapılmasına izin verir.\",\n \"Total Supplied\": \"Toplam Arz\",\n \"Total Borrowed\": \"Total Borçlanma\",\n \"Supply Reward APR\": \"Arz Ödül APRsi\",\n \"Borrow Interest Rate\": \"Borçlanma Faiz Oranı\",\n \"Borrow Reward APR\": \"Borç Alma APRsi\",\n Details: \"Detaylar\",\n Price: \"Tutar\",\n Borrowing: \"Ödünç Alınıyor\",\n Yes: \"Evet\",\n No: \"Hayır\",\n \"Reserve Factor\": \"Reserv Faktörü\",\n \"Used as Collateral\": \"Teminat olarak kullan\",\n \"Loan to Value\": \" Kredi Değerlendirme\",\n \"Liquidation Threshold\": \"Tasfiye Eşiği\",\n \"Liquidation Penalty\": \"Tasfite Cezası\",\n \"Market Details\": \"Piyasa Detayları\",\n \"Asset Pools\": \"Varlık Havuzu\",\n Others: \"Diğerleri\",\n total: \"Toplam\",\n \"Top3 Markets\": \"İlk üç pazar\",\n \"Astar Network\": \"Astar Ağı\",\n Token: \"Token\",\n \"SIO2 Token(SIO2)\": \"SIO2 Simgesi (SIO2)\",\n \"Total Raised\": \"Total Yükseliş\",\n \"Sales Opened\": \"Satış açıldı\",\n TBD: \"TBD\",\n \"Sales Closed\": \"Satış Kapandı\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"Bu sayfa ana ağda genel satış için geliştirilmiştir, ancak testnet'te değil.\",\n \"SIO2 PUBLIC SALE\": \"SİO2 Ön Satışı\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"Token Yayın Kuralları: 2 yıllık hak kazanma ve sonrasında 6 aylık vesting süreci\\n\",\n Purchase: \"Satın Al\",\n \"Stake SIO2\": \"Stake SIO2\",\n Staking: \"Staking\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2 sahipleri, daha fazlasını eklemek için SIO2'lerini Güvenlik Modülüne alabilir\\nprotokol güvenliği ve Güvenlik Teşvikleri kazanın.\\n\\\" durumundaeksik olay, bahsinizin %30'una kadar\\neksik, protokol için ek bir koruma katmanı sağlar.\",\n \"Total emission per day\": \"Günlük toplam emisyon\",\n \"Claim Rewards\": \"Ödüllerinizi Talep edin\",\n \"Funds in the Safety Module\": \"Güvenlik Modülündeki Fonlar \",\n \"1 year\": \"1 yıl\",\n \"2 years\": \"2 yıl\",\n \"3 years\": \"3 yıl\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"Stake etmeye çalıştığınız miktar, SIO2 \",\n [\"0\"],\n ' bakiyenizi SIO2 aşıyor\"',\n ],\n \"Locked Staking\": \"Kilitli Stakeler\",\n Balance: \"Bakiye\",\n \"Duration (years)\": \"Süre (Yıl) \",\n \"Pool Share\": \"Havuzun Paylaşımı\",\n Confirm: \"Onayla\",\n ID: \"ID\",\n \"Staked Amount\": \"Stake edilen miktar\",\n \"Weighted Staked Amount\": \"Ağırlıklı Stake edilen miktar\",\n \"Date Time\": \"Tarih Saat\",\n \"Locked Until\": \"Şu zamana kadar kilitli\",\n Redeem: \"Tazmin etmek\",\n \"Locked Stakes\": \"Kilitli Stakeler\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \" Henüz kilitli ürününüz yok. SIO2 jetonlarınızı stake ederek başlayın \",\n Summary: \"Özet\",\n \"Staking APR\": \"Staking APR’si\",\n \"Unweighted Stake\": \"Ağırlıksız Stake\",\n \"Weighted Stake\": \"Ağırlıklı Stake\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"Được kiểm toán bởi\",\n \"Powered by\": \"Được cung cấp bởi\",\n \"Please, connect your wallet\": \"Hãy liên kết với ví của bạn\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"Liên kết ví để có thể theo dõi được số tiền đã ký gửi, vay và những vị thế đang mở\",\n \"Connect Wallet\": \"Liên kết ví\",\n \"You need to change to a supported chain\":\n \"Bạn cần phải chuyển sang chain được hỗ trợ\",\n \"Please switch the chain with your wallet.\":\n \"Hãy chuyển sang chainđược hỗ trợ trên ví của bạn\",\n \"Failed to switch the chain\": \"Chuyển đổi chain không thành công\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"Ở chế độ local-dev mode, chỉ localhost:8545 network có thể kết nối\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"Sio2 chưa được triển khai trên chuỗi này\",\n \"Please switch to\": \"Hãy chuyển sang\",\n \"Change Network\": \"Thay đổi mạng lưới\",\n \"No Data\": \"Không có dữ liệu\",\n Show: \"buổi bieu diễn\",\n Hide: \"ẩn giấu\",\n \"Copy Success\": \"Sao chép thành công\",\n \"No account\": \"Không có tài khoản\",\n Network: \"Mạng lưới\",\n \"Copy Address\": \"Sao chép địa chỉ\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"Ngắt kết nối ví\",\n Menu: \"Thực đơn\",\n \"Global Setting\": \"Cài đặt\",\n \"Dark Mode\": \"Chế độ tối\",\n \"Select Language\": \"Lựa chọn ngôn ngữ\",\n \"Add Tokens\": \"Thêm Token\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"Chúng tôi chưa ra mắt công khai mã thông báo SIO2, vì vậy mã thông báo SIO2 không có thị trường \\\\ ngiá ngay bây giờ. Do đó, chúng tôi tính APR dựa trên giá mã thông báo ước tính, $ \\\\ n\",\n [\"SIO2_PRICE\"],\n \". Để biết thêm thông tin, vui lòng truy cập tài liệu của chúng tôi.\",\n ],\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \" Hiện tại chúng tôi chưa tổ chức vòng bán công khai cho token SIO2 vì vậy token vẫn chưacó giá trên thị trường. Vì thế chúng tôi tính toán APR dựa trênđịnh giá ước tính \",\n [\"SIO2\"],\n \".Để biết\",\n ],\n Borrow: \"Vay\",\n Repay: \"Thanh toán\",\n Amount: \"Số lượng\",\n Max: \"Tối đa\",\n \"Transaction overview\": \"Thông tin giao dịch\",\n \"Borrow APY\": \"Chi phí vay\",\n \"Borrow APR\": \"Thưởng khi vay\",\n Borrowed: \"Lượng tiền đã vay\",\n \"Borrow Limit Used\": \"Giới hạn đã vay\",\n \"Health Factor\": \"Yếu tố sức khỏe\",\n Liquidity: \"Thanh khoản\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"Vì lãi suất và giá trị luôn biến động, giá trị lớn nhất của max có thể không trả hết được tất\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh đây! Tuần đầu tiên là \"Tuần lễ Canary \" của mỏ pha lê của chúng tôi. Chúng tôi khuyến khích người dùng duy trì hệ số sức khỏe> 4 để chuẩn bị cho mọi điều kiện thị trường. Đọc <0> bài báo để biết thêm chi tiết.',\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n 'Josh đây! Tuần đầu tiên là \"Tuần lễ Canary \" của mỏ pha lê của chúng tôi. Chúng tôi khuyến khích người dùng duy trì hệ số sức khỏe> 4 để chuẩn bị cho mọi điều kiện thị trường. Đọc <0> bài báo để biết thêm chi tiết.',\n \"{0}\": [[\"0\"]],\n Collateral: \"Tài sản thế chấp\",\n ON: \"trên\",\n OFF: \"TẮT\",\n Collateral_Amount: \"Số tài sản thế chấp\",\n \"Borrowed Available\": \"Lượng vay có sẵn\",\n Disable: \"Vô hiệu hoá\",\n Enable: \"Cho phép\",\n Deposited: \"Đã ký gửi\",\n Supply: \"Cung cấp\",\n Withdraw: \"Rút\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"Để nhận <0>phần thưởng đặt cược ASTR từ <1>Algem, vui lòng cung cấp $nASTR của bạn thông qua <2>bộ chuyển đổi SiO2 trong Algem DApp.\",\n \"Supply APY\": \"Lãi suất ký gửi\",\n \"Supply APR\": \"Thưởng khi ký gửi\",\n \"Borrow Available\": \"Lượng tiền có thể vay\",\n \"This asset can't be used as collateral.\":\n \"Không thể sử dụng tài sản này làm tài sản thế chấp.\",\n \"Wallet Balance\": \"Tổng tài sản\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"Vì tiền lãi sẽ tiếp tục được tích lũy khi xác nhận giao dịch, nên số tối đa đã nhập có thể không phản ánh tổng số tiền bạn kiếm được khi giao dịch hoàn tất\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"Bởi vì lãi suất và giá trị luôn biến động theo thời gian, giá trị tối đa có thể sẽ không thể xoá\",\n \"This asset can't be used as collateral.\":\n \"Tài sản này không thể dùng làm thế chấp\",\n Dashboard: \"bảng điều khiển\",\n Market: \"Thị trường\",\n Stake: \"Cổ phần\",\n \"Public Sale\": \"Vòng bán công khai\",\n Faucet: \"Vòi\",\n \"Transaction Preparing\": \"Chuẩn bị giao dịch OFF\",\n \"Waiting for transaction to be ready...\": \"Đang chờ giao dịch sẵn sàng ...\",\n \"Confirm Transaction\": \"Xác nhận giao dịch\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"Chấp thuận gửi tài sản ERC-20 vào nhóm.\",\n \"Transaction Pending\": \"Giao dịch đang chờ xử lý\",\n \"Waiting for the transaction to be confirmed...\":\n \"Đang chờ giao dịch được xác nhận ...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"Phê duyệt hợp đồng vay tài sản ERC-20 bằng khoản tín dụng của bạn.\",\n \"Confirm the transaction.\": \"Xác nhận giao dịch.\",\n \"Transaction Submitted\": \"Giao dịch đã được gửi\",\n \"Succeeded!\": \"Đã thành công!\",\n \"Your transaction confirmed!\": \"Giao dịch của bạn đã được xác nhận!\",\n \"Transaction Canceled\": \"Giao dịch bị hủy\",\n \"You have canceled the transaction.\": \"Bạn đã hủy giao dịch.\",\n Error: \"Lỗi\",\n \"Enter amount\": \"Nhập số tiền\",\n \"No balance to deposit\": \"Không có số dư để gửi\",\n \"No balance to withdraw\": \"Không có số dư để rút\",\n \"Insufficient collateral\": \"Tài sản thế chấp không đủ\",\n \"No liquidity to withdraw\": \"Không có thanh khoản để rút\",\n \"Health factor too low\": \"Hệ số sức khỏe quá thấp\",\n \"Borrowing limit reached\": \"Đã đạt đến hạn mức vay\",\n \"No liquidity to borrow\": \"Không có thanh khoản để vay\",\n \"Not enough wallet balance to repay\": \"Không đủ số dư trong ví để trả nợ\",\n \"No borrowed balance to repay\": \"Không có số dư đã vay để trả lại\",\n \"Enter leverage\": \"Nhập đòn bẩy\",\n \"No balance to loop\": \"Không có số dư để lặp lại\",\n \"Supply Balance\": \"Lượng tiền ký gửi\",\n \"Borrow Balance\": \"Lượng tiền vay\",\n Asset: \"Tài sản\",\n \"Reward APR\": \"Tỷ lệ thưởng\",\n \"Interest Rate\": \"Lãi suất\",\n \"Borrow Markets\": \"Thị trường vay\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"Trung bình lợi suất của tất cả tài sản ký gửi bao gồm cả phần thưởng khuyến khích.\",\n Supplied: \"Đã ký gửi\",\n \"Supply Markets\": \"Thị trường ký gửi\",\n \"Net APY\": \"Lãi suất ròng\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"APY ròng là hiệu quả tổng hợp của tất cả các vị thế cung và vay trên giá trị ròng, bao gồm cả các ưu đãi. Có thể có APY ròng âm nếu APY nợ cao hơn APY cung.\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"Yếu tố sức khỏe của bạn và khoản vay để định giá xác định sự đảm bảo cho tài sản thế chấp của bạn. Để tránh bị thanh lý, bạn có thể\",\n \"1. supply more collateral\": \"1. Cung cấp thêm tài sản thế chấp\",\n \"2. repay borrow positions\": \"2. hoàn trả các vị trí đã vay\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"Khi chỉ số health factor dưới 1, tài sản thế chấp của vợ sẽ bị thanh lý.\",\n \"RISK DETAILS\": \"THÔNG TIN RỦI RO\",\n Claim: \"Yêu cầu\",\n \"Available SIO2 Rewards\": \" Phần thưởng SIO2 có sẵn\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"Mặc dù phần thưởng SIO2 tích lũy mỗi phút, giá trị trên giao diện người dùng chỉ cập nhật khi bạn giao dịch với thị trường cung ứng và thị trường vay. Do đó, bạn có thể nhận được nhiều phần thưởng hơn số phần thưởng được hiển thị khi nhấp vào 'Yêu cầu'.\",\n \"Learn more\": \"Tìm hiểu thêm\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including\":\n \"Lợi suất ròng là hiệu quả tổng hợp của tất cả các vị thế cung và vay trên giá trị ròng, bao\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid\":\n \"Health factor của bạn và tỷ lệ cho vay trên giá trị xácđịnh sựđảm bảo tài sản thế chấp của\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when youtransact with the supply and borrow markets. Therefore you may receive more rewards than is\":\n \"Mặc dù phần thưởng SIO2 tích lũy mỗi phút, giá trị trên giao diện người dùng chỉ cập nhậtkhi bạn giao dịch với thị trường cung ứng và thị trường vay. Do đó, bạn có thể nhận được\",\n Name: \"Tên\",\n Action: \"Hoạt động\",\n Mint: \"cây bạc hà\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"Để ngăn chặn chương trình thư rác, vòi testnet của chúng tôi chỉ cho phép mỗi người dùng một phút mỗi nội dung mỗi ngày.\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each\":\n \"Để tránh bot spam, testnet faucet của chúng tôi chỉ hỗ trợ một lượt trên mỗi người dùng\",\n \"Total Supplied\": \"Tổng tiền ký gửi\",\n \"Total Borrowed\": \"Tổng tiền đã vay\",\n \"Supply Reward APR\": \"Thưởng khi ký gửi\",\n \"Borrow Interest Rate\": \"Lãi suất vay\",\n \"Borrow Reward APR\": \"Thưởng khi vay\",\n Details: \"Thông tin chi tiết\",\n Price: \"Giá\",\n Borrowing: \"Vay\",\n Yes: \"Đồng ý\",\n No: \"Không đồng ý\",\n \"Reserve Factor\": \"Reverse Factor\",\n \"Used as Collateral\": \"Sử dụng làm tài sản thế chấp\",\n \"Loan to Value\": \"Tỷ lệ cho vay\",\n \"Liquidation Threshold\": \"Ngưỡng thanh lý\",\n \"Liquidation Penalty\": \"Tiền phạt thanh lý\",\n \"Market Details\": \"Thông tin thị trường\",\n \"Asset Pools\": \"Bể tài sản\",\n Detail: \"Thông tin chi tiết\",\n Others: \"Khác\",\n total: \"tổng\",\n \"Top3 Markets\": \"3 thị trường đứng đầu\",\n \"Astar Network\": \"Mạng Astar\",\n Token: \"Token\",\n \"SIO2 Token(SIO2)\": \"Mã thông báo SIO2 (SIO2)\",\n \"Total Raised\": \"Số tiền đã kêu gọi\",\n \"Sales Opened\": \"Vòng bán đã mở\",\n TBD: \"chưa giải quyết\",\n \"Sales Closed\": \"Vòng bán đã kết thúc\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"Trang web này được thiết kế cho vòng mở bán công khai trên mainet, không hỗ trợ trên\",\n \"SIO2 PUBLIC SALE\": \"SIO2 BÁN CÔNG CHÚNG\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"Phân bổ token: Số token sẽ được phân bổ trong vòng hai năm, bắt đầu sau 6 tháng tính từ\",\n Purchase: \"Mua\",\n \"$ {0}\": [\"$ \", [\"0\"]],\n \"Stake SIO2\": \"Stake SIO2\",\n Staking: \"Staking\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2 holder có thể stake SIO2 của họ vào Safety Module để cung cấp bảo mật cho giaothức và nhận được phần thưởng khuyến khích khi tham gia. Trong trường hợp giáđi xuốngmạnh, trên 30% lượng stake của bạn có thể bị mất để bù đắp sự thiếu hụt, cung cấp một lớp\",\n \"Total emission per day\": \"Tổng lượng phát thải mỗi ngày\",\n \"Claim Rewards\": \"Nhận phần thưởng\",\n \"Funds in the Safety Module\": \"Lượng tài sản trong Safety Module\",\n \"1 year\": \"1 năm\",\n \"2 years\": \"2 năm\",\n \"3 years\": \"3 năm\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"Số tiền bạn đang cố đặt cược vượt quá số dư của bạn \",\n [\"0\"],\n \" SIO2\",\n ],\n \"Locked Staking\": \"Staking đã được khoá\",\n Balance: \"Số lượng\",\n \"Duration (years)\": \"Thời gian (năm)\",\n \"Pool Share\": \"Cổ phần\",\n Confirm: \"Xác nhận\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"Số tiền bạn đang stake vượt quá số dư \",\n [\"0\"],\n \" SIO2 mà bạn đang có\",\n ],\n ID: \"ID\",\n \"Staked Amount\": \"Số lượng stake\",\n \"Weighted Staked Amount\": \"Số lượng\",\n \"Date Time\": \"Ngày giờ\",\n \"Locked Until\": \"Khoá cho tới\",\n Redeem: \"Chuộc lại\",\n \"Locked Stakes\": \"Stake đã khoá lại\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"Bạn chưa có bất kỳ cổ phần bị khóa nào. Bắt đầu bằng cách đặt mã thông báo SIO2 của bạn.\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"Bạn chưa khoá token SIO2 nào, hãy stake SIO2\",\n Summary: \"Tổng quan\",\n \"Staking APR\": \"Staking APR\",\n \"Unweighted Stake\": \"Stake\",\n \"Weighted Stake\": \"Stake trọng tâm\",\n },\n};\n","/*eslint-disable*/ module.exports = {\n messages: {\n \"Audited by\": \"审核\",\n \"Powered by\": \"供应\",\n \"Please, connect your wallet\": \"请连接钱包\",\n \"Please connect your wallet to see your supplies, borrowings, and open positions.\":\n \"请连接您的钱包以查看您的存款、借款,和现有仓位。\",\n \"Connect Wallet\": \"连接钱包\",\n \"You need to change to a supported chain\": \"您需要更改为支持的链\",\n \"Please switch the chain with your wallet.\": \"请使用钱包切换链\",\n \"Failed to switch the chain\": \"切换链失败\",\n \"In local-dev mode, only localhost:8545 network can be connected\":\n \"在 local-dev 模式下,只能连接 localhost:8545 网络\",\n \"SiO2 Finance is not yet depolyed to this network\":\n \"SiO2 Finance 尚未部署到此网络\",\n \"Please switch to\": \"请切换到\",\n \"Change Network\": \"改变网络\",\n \"No Data\": \"暂无数据\",\n Show: \"展示\",\n Hide: \"隐藏\",\n show: \"展示\",\n hide: \"隐藏\",\n \"Copy Success\": \"复制成功\",\n \"No account\": \"没有账号\",\n Network: \"网络\",\n \"Copy Address\": \"复制地址\",\n \"Astar Safe Wallet\": \"Astar Safe Wallet\",\n \"Disconnect Wallet\": \"断开钱包\",\n Menu: \"菜单\",\n \"Global Setting\": \"全局设置\",\n \"Dark Mode\": \"夜间模式\",\n \"Select Language\": \"选择语言\",\n \"Add Tokens\": \"添加代币\",\n \"We have not launched the SIO2 token publicly, so the SIO2 token doesn't have a market\\nprice right now. Therefore we calculate APR based on the estimated token price, $\\n{SIO2_PRICE}. For more information, please visit our documentation.\":\n [\n \"我们还没有公开发行SIO2代币,所以SIO2代币目前没有市场价。\\n因此我们根据估计的代币价格计算APR,$\\n\",\n [\"SIO2_PRICE\"],\n \"。有关更多信息,请访问我们的文档。\",\n ],\n Borrow: \"借\",\n Repay: \"偿还\",\n Amount: \"金额\",\n Max: \"最大\",\n \"Transaction overview\": \"交易概览\",\n \"Borrow APY\": \"借 APY\",\n \"Borrow APR\": \"借 APR\",\n Borrowed: \"借入\",\n \"Borrow Limit Used\": \"已使用的借款限额\",\n \"Health Factor\": \"健康因子\",\n Liquidity: \"流动性\",\n \"Since interest and value fluctuate all the time, the maximum value\\nof max may not be able to fully pay off all loans.\":\n \"由于利息和价格一直在波动 \\n最大价值可能无法完全清除所有存款\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor > 4 to prepare for all market conditions. Read <0>the article for more details.':\n \"乔希在这里! 第一周是我们水晶矿的“金丝雀周”。 我们鼓励用户保持健康系数 > 4,以便为所有市场条件做好准备。 阅读<0>文章了解更多详情。\",\n \"Josh here!\": \"Josh here!\",\n 'Josh here! The first week is the \"Canary Week\" of our crystal mine. We encourage users to maintain a health factor> 4 to prepare for all market conditions. Read <0>the article for more details.':\n \"乔希在这里! 第一周是我们水晶矿的“金丝雀周”。 我们鼓励用户保持健康系数>4,为所有市场状况做好准备。 阅读<0>文章了解更多详情。\",\n \"{0}\": [[\"0\"]],\n Collateral: \"抵押品\",\n ON: \"开\",\n OFF: \"关\",\n Collateral_Amount: \"抵押品金额\",\n \"Borrowed Available\": \"可借额度\",\n Disable: \"禁用\",\n Enable: \"启用\",\n Deposited: \"存款\",\n Supply: \"供应\",\n Withdraw: \"提现\",\n \"To receive <0>ASTR staking rewards from <1>Algem, please supply your $nASTR via the <2>SiO2 adapter within the Algem DApp.\":\n \"要从 <1>Algem 获得 <0>ASTR 质押奖励,请通过 Algem DApp 中的<2>SiO2 适配器提供您的 $nASTR。\",\n \"Supply APY\": \"供应 APY\",\n \"Supply APR\": \"供应 APR\",\n \"Borrow Available\": \"可借额度\",\n \"This asset can't be used as collateral.\": \"该资产不能用作抵押。\",\n \"Wallet Balance\": \"钱包余额\",\n \"Since the interest will continue to accumulate when confirming the transaction, the max number entered may not reflect the total you earned when the transaction is complete\":\n \"由于确认交易时利息会继续累积,因此输入的最大数字可能无法反映交易完成时您赚取的总金额\",\n \"Since the interest and value fluctuate from time to time, the max\\nvalue may not be able to completely remove all deposits\":\n \"由于利息和价值不时波动,最大\\n价值可能无法完全清除所有存款\",\n Dashboard: \"仪表盘\",\n Market: \"市场\",\n Stake: \"质押\",\n \"Public Sale\": \"公售\",\n Faucet: \"水龙头\",\n \"Transaction Preparing\": \"交易准备中\",\n \"Waiting for transaction to be ready...\": \"等待交易完成...\",\n \"Confirm Transaction\": \"确认交易\",\n \"Approve sending the ERC-20 asset to the pool.\":\n \"批准将 ERC-20 资产发送到池中。\",\n \"Transaction Pending\": \"交易待定\",\n \"Waiting for the transaction to be confirmed...\": \"等待交易确认...\",\n \"Approve the contract to borrow ERC-20 assets on your credit.\":\n \"批准合约以您的信用借出 ERC-20 资产。\",\n \"Confirm the transaction.\": \"确认交易。\",\n \"Transaction Submitted\": \"交易已提交\",\n \"Succeeded!\": \"成功了!\",\n \"Your transaction confirmed!\": \"您的交易已确认!\",\n \"Transaction Canceled\": \"交易取消\",\n \"You have canceled the transaction.\": \"您已取消交易。\",\n Error: \"错误\",\n \"Enter amount\": \"输入金额\",\n \"No balance to deposit\": \"没有余额可以存入\",\n \"No balance to withdraw\": \"没有余额可以提取\",\n \"Insufficient collateral\": \"抵押品不足\",\n \"No liquidity to withdraw\": \"没有可提取的流动性\",\n \"Health factor too low\": \"健康因子太低\",\n \"Borrowing limit reached\": \"达到借款限额\",\n \"No liquidity to borrow\": \"没有流动性可借\",\n \"Not enough wallet balance to repay\": \"没有足够的钱包余额来偿还\",\n \"No borrowed balance to repay\": \"没有借来的余额要偿还\",\n \"Enter leverage\": \"输入杠杆\",\n \"No balance to loop\": \"没有余额循环\",\n \"Supply Balance\": \"供应总额\",\n \"Borrow Balance\": \"借款总额\",\n Asset: \"资产\",\n \"Reward APR\": \"奖励 APR\",\n \"Interest Rate\": \"利率\",\n \"Borrow Markets\": \"借贷市场\",\n APY: \"APY\",\n \"The weighted average of APY for all supplied assets,including incentives\":\n \"所有提供资产(包括激励措施)的 APY 加权平均值\",\n Supplied: \"供应\",\n \"Supply Markets\": \"供应市场\",\n \"Net APY\": \"净 APY\",\n \"Net APY is the combined effect of all supply and borrow positions on net worth, including incentives. It is possible to have a negative net APY if debt APY is higher than supply APY.\":\n \"净 APY 是所有供应和借款头寸对净值的综合影响,包括激励措施。 如果债务 APY 高于供应 APY,则可能有负的净 APY。\",\n \"Your health factor and loan to value determine the assurance of your collateral. To avoid liquidations you can\":\n \"您的健康因子和贷款价值决定了您的抵押品的保证。 为避免清算,您可以\",\n \"1. supply more collateral\": \"1. 提供更多的抵押品\",\n \"2. repay borrow positions\": \"2. 偿还借入仓位\",\n \"When your health factor is below 1, your collateral will be liquidated.\":\n \"当您的健康因子低于1时,您的抵押品将被清算。\",\n \"RISK DETAILS\": \"风险详情\",\n Claim: \"领取\",\n \"Available SIO2 Rewards\": \"可用的 SIO2 奖励\",\n \"Although the SIO2 rewards accrue every minute, the value on the UI only updates when you transact with the supply and borrow markets. Therefore you may receive more rewards than is displayed when clicking 'Claim'.\":\n \"尽管 SIO2 奖励每分钟都会累积,但 UI 上的值仅在您与供应和借贷市场进行交易时才会更新。 因此,您可能会收到比点击“领取”时显示的更多的奖励\",\n \"Learn more\": \"了解更多\",\n Name: \"名称\",\n Action: \"操作\",\n Mint: \"铸币\",\n \"To prevent spam bots, our testnet faucet only allows one mint per asset per day for each user.\":\n \"为防止垃圾邮件机器人,我们的测试网水龙头每天只允许每个用户在单个资产上提取一次免费的测试用代币。\",\n \"Total Supplied\": \"供应总量\",\n \"Total Borrowed\": \"总借款额\",\n \"Supply Reward APR\": \"供应奖励 APR\",\n \"Borrow Interest Rate\": \"借款利率\",\n \"Borrow Reward APR\": \"借入奖励 APR\",\n Details: \"详情\",\n Price: \"价格\",\n Borrowing: \"借入\",\n Yes: \"是\",\n No: \"否\",\n \"Reserve Factor\": \"储备金率\",\n \"Used as Collateral\": \"用作抵押品\",\n \"Loan to Value\": \"贷款价值\",\n \"Liquidation Threshold\": \"清算阈值\",\n \"Liquidation Penalty\": \"清算罚款\",\n \"Market Details\": \"市场详情\",\n \"Asset Pools\": \"资产池\",\n Detail: \"详情\",\n Others: \"其他\",\n total: \"总共\",\n \"Top3 Markets\": \"前3大市场\",\n \"Astar Network\": \"Astar 网络\",\n Token: \"代币\",\n \"SIO2 Token(SIO2)\": \"SIO2 代币(SIO2)\",\n \"Total Raised\": \"筹款总额\",\n \"Sales Opened\": \"销售开启\",\n TBD: \"待定\",\n \"Sales Closed\": \"销售结束\",\n \"This page is developed for public sale on mainnet, but not testnet.\":\n \"此页面是为在主网上公开发售而开发的,不适用于测试网。\",\n \"SIO2 PUBLIC SALE\": \"SIO2 公开发售\",\n \"Token Release Rules: 2-year vesting with a 6-month cliff after\\nlaunch\":\n \"代币发行规则:2年vesting + 6个月 cliff\",\n Purchase: \"购买\",\n \"$ {0}\": [\"$ \", [\"0\"]],\n \"Stake SIO2\": \"质押 SIO2\",\n Staking: \"质押\",\n \"SIO2 holders can stake their SIO2 in the Safety Module to add more\\nsecurity to the protocol and earn Safety Incentives. In the case of a\\nshortfall event, up to 30% of your stake can be slashed to cover the\\ndeficit, providing an additional layer of protection for the protocol.\":\n \"SIO2 持有者可以将他们的 SIO2 质押在安全模块中,从而为协议增加更多安全性并获得安全奖励。如果出现了亏空事件,安全模块可以最多出售 30% 的质押份额以弥补赤字,以此为协议提供额外的保护。\",\n \"Total emission per day\": \"每日总排放量\",\n \"Claim Rewards\": \"领取奖励\",\n \"Funds in the Safety Module\": \"安全模块中的资金\",\n \"1 year\": \"1 年\",\n \"2 years\": \"2 年\",\n \"3 years\": \"3 年\",\n \"The amount you're trying to stake exceeds your balance by {0} SIO2\": [\n \"您尝试质押的金额超出您的余额 \",\n [\"0\"],\n \" SIO2\",\n ],\n \"Locked Staking\": \"锁定的质押\",\n Balance: \"余额\",\n \"Duration (years)\": \"日期(年)\",\n \"Pool Share\": \"池中份额\",\n Confirm: \"确认\",\n ID: \"ID\",\n \"Staked Amount\": \"质押数量\",\n \"Weighted Staked Amount\": \"加权质押数量\",\n \"Date Time\": \"约定时间\",\n \"Locked Until\": \"解锁日期\",\n Redeem: \"赎回\",\n \"Locked Stakes\": \"锁定的质押\",\n \"You don't have any locked stakes yet. Start by staking your SIO2 tokens.\":\n \"您还没有任何锁定的质押。 请先质押您的 SIO2 代币。\",\n Summary: \"汇总\",\n \"Staking APR\": \"质押 APR\",\n \"Unweighted Stake\": \"非加权质押\",\n \"Weighted Stake\": \"加权质押\",\n },\n};\n","export const ellipsizeMid = (str: string, left: number, right: number) =>\n `${str.slice(0, left)}...${str.slice(-right)}`;\n","import { ellipsizeMid } from \"./string\";\n\nexport const shortenAddress = (address: string): string => {\n return ellipsizeMid(address, 6, 4);\n};\n\nexport const equals = (\n a: string | null | undefined,\n b: string | null | undefined\n) => (a && b ? a.toLowerCase() === b.toLowerCase() : false);\n","import {\n ASSETS,\n ASSETS_DICT,\n LISTED_ASSET_SYMBOLS,\n} from \"src/constants/assets\";\nimport { Asset, AssetSymbol, User } from \"src/types/models\";\nimport { BN_ZERO } from \"./number\";\n\nexport const isListed = (symbol: any): symbol is AssetSymbol =>\n LISTED_ASSET_SYMBOLS.includes(symbol);\n\nexport const onlyListed =

(\n value: P\n): value is P & { symbol: AssetSymbol } => isListed(value.symbol);\n\nexport const assetFromSymbol = (symbol: AssetSymbol): Asset =>\n ASSETS_DICT[symbol];\n\nexport const generateSymbolDict = (value: T): { [key in AssetSymbol]: T } =>\n ASSETS.reduce(\n (prev, { symbol }) => ({\n ...prev,\n [symbol]: value,\n }),\n {}\n ) as { [key in AssetSymbol]: T };\n\nexport const EMPTY_BALANCE_BY_ASSET: User[\"balanceByAsset\"] =\n generateSymbolDict({\n deposited: BN_ZERO,\n borrowed: BN_ZERO,\n usageAsCollateralEnabled: false,\n });\n","import {\n BigNumber,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { AssetMarketData, User } from \"src/types/models\";\nimport { ValueOf } from \"type-fest\";\nimport { BN_ONE, BN_ZERO } from \"./number\";\n\nBigNumber.config({ EXPONENTIAL_AT: 1e9 });\n\nexport const calculateNetAPY = (\n balanceByAsset: User[\"balanceByAsset\"],\n assets: AssetMarketData[],\n marketReferenceCurrencyPriceInUSD: BigNumber,\n totalDepositedInUSD: BigNumber\n) => {\n if (totalDepositedInUSD.lte(BN_ZERO)) return BN_ZERO;\n const { profitInUSD, lossInUSD, rewardInUSD } = Object.entries(\n balanceByAsset\n ).reduce(\n (prev, [symbol, balance]) => {\n const asset = assets.find((each) => each.symbol === symbol);\n if (!asset) return prev;\n const pl = calculateAssetPL(\n balance,\n asset,\n marketReferenceCurrencyPriceInUSD\n );\n return {\n profitInUSD: prev.profitInUSD.plus(pl.profitInUSD),\n lossInUSD: prev.lossInUSD.plus(pl.lossInUSD),\n rewardInUSD: prev.rewardInUSD.plus(pl.rewardInUSD),\n };\n },\n {\n profitInUSD: BN_ZERO,\n lossInUSD: BN_ZERO,\n rewardInUSD: BN_ZERO,\n }\n );\n return profitInUSD\n .plus(rewardInUSD)\n .minus(lossInUSD)\n .dividedBy(totalDepositedInUSD);\n};\n\nexport const calculateAssetPL = (\n { deposited, borrowed }: ValueOf,\n asset: AssetMarketData,\n marketReferenceCurrencyPriceInUSD: BigNumber\n) => {\n const {\n priceInMarketReferenceCurrency,\n depositAPY,\n depositIncentiveAPR,\n variableBorrowAPY,\n variableBorrowIncentiveAPR,\n } = asset;\n\n const assetPriceInUSD = priceInMarketReferenceCurrency.multipliedBy(\n marketReferenceCurrencyPriceInUSD\n );\n const depositedInUSD = deposited.multipliedBy(assetPriceInUSD);\n const borrowedInUSD = borrowed.multipliedBy(assetPriceInUSD);\n const rewardInUSD = depositedInUSD\n .multipliedBy(\n depositIncentiveAPR.isFinite() ? asset.depositIncentiveAPR : BN_ZERO\n )\n .plus(\n borrowedInUSD.multipliedBy(\n variableBorrowIncentiveAPR.isFinite()\n ? asset.variableBorrowIncentiveAPR\n : BN_ZERO\n )\n );\n return {\n profitInUSD: depositedInUSD.multipliedBy(depositAPY),\n lossInUSD: borrowedInUSD.multipliedBy(variableBorrowAPY),\n rewardInUSD,\n };\n};\n\nexport const calculateLoopingAPR = (params: {\n leverage: BigNumber;\n depositIncentiveAPR: BigNumber;\n variableBorrowIncentiveAPR: BigNumber;\n}) => {\n const base = BN_ONE;\n const maxDeposit = base.multipliedBy(params.leverage);\n const maxBorrow = maxDeposit.minus(base);\n return maxDeposit\n .multipliedBy(params.depositIncentiveAPR)\n .plus(maxBorrow.multipliedBy(params.variableBorrowIncentiveAPR))\n .div(base);\n};\n\nexport const ltvToLoopingLeverage = (ltv: BigNumber) =>\n BN_ONE.div(BN_ONE.minus(ltv));\n\nexport const loopingLeverageToLtv = (leverage: BigNumber) =>\n BN_ONE.minus(BN_ONE.div(leverage));\n\nexport const significantLoopingCount = (\n leverage: BigNumber,\n significantDigits = 1,\n maxCount = 40\n) => {\n const ltv = loopingLeverageToLtv(leverage);\n let currentleverage = BN_ONE;\n let prevLtv = ltv;\n const significantNum = BN_ONE.shiftedBy(significantDigits * -1);\n for (let i = 1; i < 40; i++) {\n currentleverage = currentleverage.plus(prevLtv);\n prevLtv = prevLtv.multipliedBy(ltv);\n if (leverage.minus(currentleverage).lt(significantNum))\n return Math.max(i, 2);\n }\n return maxCount;\n};\n\nexport const convertToUSD = (\n priceInMarketReferenceCurrency: BigNumber,\n marketReferenceCurrencyPriceInUSD: BigNumber,\n amount: BigNumber\n) =>\n valueToBigNumber(amount)\n .multipliedBy(priceInMarketReferenceCurrency)\n .multipliedBy(marketReferenceCurrencyPriceInUSD);\n\nexport const convertToUSDBulk = (\n priceInMarketReferenceCurrency: BigNumber,\n marketReferenceCurrencyPriceInUSD: BigNumber,\n ...amounts: BigNumber[]\n) =>\n amounts.map((amount) =>\n convertToUSD(\n priceInMarketReferenceCurrency,\n marketReferenceCurrencyPriceInUSD,\n amount\n )\n );\n\nexport const convertFromUSD = (\n priceInMarketReferenceCurrency: BigNumber,\n marketReferenceCurrencyPriceInUSD: BigNumber,\n amount: BigNumber\n) =>\n valueToBigNumber(amount)\n .div(marketReferenceCurrencyPriceInUSD)\n .div(priceInMarketReferenceCurrency);\n","import { CHAIN_ID } from \"src/libs/config/network\";\n\nexport const DEFAULT_CHAIN_ID =\n process.env.REACT_APP_ENV === \"dev\"\n ? CHAIN_ID.dev\n : process.env.REACT_APP_ENV === \"prod\"\n ? CHAIN_ID.astar\n : CHAIN_ID.shibuya;\n\nexport const GTM_ID = process.env.NEXT_PUBLIC_GTM_ID;\n","import { settingDataProps } from \"@/hook/app/useAppSetting\";\nimport {\n BigNumber,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\nimport { BN_ONE } from \"./number\";\n\nexport const getGasPriceMultiplier = () => {\n const value = localStorage.getItem(\"gasPriceMultiplier\");\n return value ? valueToBigNumber(value) : BN_ONE;\n};\n\nexport const setGasPriceMultiplier = (value: BigNumber) =>\n localStorage.setItem(\"gasPriceMultiplier\", value.toString());\n\nexport const getSettingStorage = () => {\n let value = localStorage.getItem(\"app-setting\");\n return value ? JSON.parse(value) : undefined;\n};\n\nexport const setSettingStorage = (value: settingDataProps) => {\n return localStorage.setItem(\"app-setting\", JSON.stringify(value));\n};\n","import {\n BigNumber,\n BigNumberValue,\n valueToBigNumber,\n} from \"submodule/packages/math-utils/dist/cjs\";\n\nconst SCALES = [\"\", \"K\", \"M\", \"B\", \"T\", \"P\", \"E\", \"Z\", \"Y\"] as const;\n\nexport const BN_ONE: BigNumber = valueToBigNumber(\"1\");\nexport const BN_HUNDRED: BigNumber = valueToBigNumber(\"100\");\n\nexport const BN_ZERO = valueToBigNumber(\"0\");\nexport const BN_NAN = valueToBigNumber(\"NaN\");\n\ntype FormatOption = Partial<{\n decimalPlaces: number;\n shorteningThreshold: number;\n roundingMode: BigNumber.RoundingMode;\n prefix?: string;\n}>;\nconst formatNum = (\n num: BigNumber,\n {\n decimalPlaces,\n shorteningThreshold,\n roundingMode,\n prefix = \"\",\n }: FormatOption = {}\n) => {\n const int = num.integerValue(BigNumber.ROUND_FLOOR);\n if (!int.isZero() || num.isZero()) {\n const formatted = decimalPlaces\n ? `${num.toFormat(decimalPlaces, roundingMode)}`\n : `${num.toFormat(decimalPlaces)}`;\n if (!shorteningThreshold || formatted.length < shorteningThreshold)\n return `${prefix}${formatted}`;\n const [int, decimals] = formatted.split(\".\");\n const intLengthWithDot = int.length + 1;\n if (decimals && intLengthWithDot < shorteningThreshold)\n return `${prefix}${int}.${decimals.slice(\n 0,\n shorteningThreshold - intLengthWithDot\n )}`;\n return formatAmtShort(num, {\n decimalPlaces: Math.max(\n shorteningThreshold - int.toString().length - 1,\n Math.min(shorteningThreshold - 4, 2)\n ),\n prefix,\n });\n }\n\n const adjustedDecimalPlaces = Math.min(\n (shorteningThreshold || Number.MAX_SAFE_INTEGER) - 2,\n decimalPlaces || Number.MAX_SAFE_INTEGER\n );\n const shifted = num\n .shiftedBy(adjustedDecimalPlaces)\n .integerValue(BigNumber.ROUND_FLOOR);\n if (shifted.integerValue().isZero())\n return `< ${prefix}${BN_ONE.shiftedBy(-adjustedDecimalPlaces).toFormat(\n adjustedDecimalPlaces\n )}`;\n\n const formatted = `${num.toFormat(decimalPlaces)}`;\n if (!shorteningThreshold || formatted.length < shorteningThreshold)\n return `${prefix}${formatted}`;\n\n return `${prefix}${num.toFormat(adjustedDecimalPlaces)}`;\n};\n\nexport const formatAmt = (\n num: BigNumber,\n { symbol, ...opts }: FormatOption & { symbol?: string } = {}\n) => `${formatNum(num, opts)}${symbol ? ` ${symbol}` : \"\"}`;\n\nexport const formatAmtShort = (\n num: BigNumber,\n opts: Omit = {}\n) => {\n const {\n decimalPlaces = 2,\n prefix = \"\",\n roundingMode = BigNumber.ROUND_FLOOR,\n } = opts;\n if (!num?.isFinite()) return num.toString();\n const scaleIdx =\n Math.min(Math.ceil(num.toFixed(0).length / 3), SCALES.length) - 1;\n const scaledNum = num.shiftedBy(-(scaleIdx || 0) * 3);\n return `${prefix}${scaledNum.toFormat(decimalPlaces, roundingMode)}${\n SCALES[scaleIdx]\n }`;\n};\n\nexport const formatUSD = (\n num: BigNumberValue,\n option: FormatOption = { shorteningThreshold: 8, decimalPlaces: 2 }\n) => `${formatNum(valueToBigNumber(num), { ...option, prefix: \"$\" })}`;\n\nexport const formatUSDShort: typeof formatAmtShort = (num, opts) =>\n `${formatAmtShort(num, { ...opts, prefix: \"$\" })}`;\n\nexport const formatPct = (num: BigNumberValue, option: FormatOption = {}) => {\n const { shorteningThreshold = 5, decimalPlaces = 2 } = option;\n return `${formatNum(BN_HUNDRED.multipliedBy(num), {\n ...option,\n shorteningThreshold,\n decimalPlaces,\n })}%`;\n};\n\nexport const formattedToBigNumber = (\n formattedAmount: string,\n defaultValue?: BigNumber\n) => {\n const value = formattedAmount.replace(/,/g, \"\");\n const bn = valueToBigNumber(value);\n return bn.isNaN() ? defaultValue : bn;\n};\n\nconst AMOUNT_REGEX = /^\\d*\\.?\\d*$/;\nconst TRAILING_ZEROS_REGEXP = /(0*)$/;\nexport const parseInput = (input: string, significantDigits: number) => {\n if (input === \"\") return input;\n const value = input.replace(/,/g, \"\");\n if (!AMOUNT_REGEX.test(value)) return;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_int, decimals] = value.split(\".\");\n if (decimals?.length > significantDigits) return;\n if (value.startsWith(\".\") || value.endsWith(\".\")) {\n return value;\n }\n const bn = valueToBigNumber(value);\n if (bn.isNaN() || bn.isZero()) return value;\n const trailingZerosResult = TRAILING_ZEROS_REGEXP.exec(decimals);\n const trailingZeros = (trailingZerosResult && trailingZerosResult[1]) || \"\";\n const formatted = formatAmt(bn);\n return `${formatted}${\n trailingZeros.length && !formatted.includes(\".\")\n ? `.${trailingZeros}`\n : trailingZeros\n }`;\n};\n\nexport const handleArrow = (\n code: string,\n value: BigNumber,\n step: number,\n onChange: (value: BigNumber) => void\n) => {\n switch (code) {\n case \"ArrowUp\":\n onChange(value.plus(step));\n return;\n case \"ArrowDown\":\n onChange(BigNumber.max(value.minus(step), BN_ZERO));\n return;\n }\n};\n\nconst REGEXP_ZEROS_BEFORE_VALID_NUMBER = /\\.(0*)[1-9]/;\nexport const getFirstNumberDecimalPlaces = (num: number) => {\n if (num > 1) return 0;\n const result = REGEXP_ZEROS_BEFORE_VALID_NUMBER.exec(`${num}`);\n if (!result?.length) return 0;\n return (result[1]?.length || 0) + 2;\n};\nexport const roundDownDecimals = (num: number, decimalPlaces: number) =>\n Math.floor(num * 10 ** decimalPlaces) / 10 ** decimalPlaces;\n","import { BigNumber, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport { valueToWei } from '../commons/utils';\nimport { DebtTokenValidator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport { IERC20ServiceInterface } from '../erc20-contract';\nimport { IDebtTokenBase } from './typechain/IDebtTokenBase';\nimport { IDebtTokenBase__factory } from './typechain/IDebtTokenBase__factory';\n\nexport interface BaseDebtTokenInterface {\n approveDelegation: (\n args: ApproveDelegationType,\n ) => EthereumTransactionTypeExtended;\n isDelegationApproved: (args: DelegationApprovedType) => Promise;\n}\n\nexport type ApproveDelegationType = {\n user: tEthereumAddress;\n delegatee: tEthereumAddress;\n debtTokenAddress: tEthereumAddress;\n amount: string; // wei\n};\n\nexport type DelegationApprovedType = {\n debtTokenAddress: tEthereumAddress;\n allowanceGiver: tEthereumAddress;\n allowanceReceiver: tEthereumAddress;\n amount: string; // normal\n};\n\nexport class BaseDebtToken\n extends BaseService\n implements BaseDebtTokenInterface\n{\n readonly erc20Service: IERC20ServiceInterface;\n\n constructor(\n provider: providers.Provider,\n erc20Service: IERC20ServiceInterface,\n ) {\n super(provider, IDebtTokenBase__factory);\n this.erc20Service = erc20Service;\n }\n\n @DebtTokenValidator\n public approveDelegation(\n @isEthAddress('user')\n @isEthAddress('delegatee')\n @isEthAddress('debtTokenAddress')\n @isPositiveAmount('amount')\n { user, delegatee, debtTokenAddress, amount }: ApproveDelegationType,\n ): EthereumTransactionTypeExtended {\n const debtTokenContract: IDebtTokenBase =\n this.getContractInstance(debtTokenAddress);\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n debtTokenContract.populateTransaction.approveDelegation(\n delegatee,\n amount,\n ),\n from: user,\n });\n\n return {\n tx: txCallback,\n txType: eEthereumTxType.ERC20_APPROVAL,\n gas: this.generateTxPriceEstimation([], txCallback),\n };\n }\n\n @DebtTokenValidator\n public async isDelegationApproved(\n @isEthAddress('debtTokenAddress')\n @isEthAddress('allowanceGiver')\n @isEthAddress('allowanceReceiver')\n @isPositiveAmount('amount')\n {\n debtTokenAddress,\n allowanceGiver,\n allowanceReceiver,\n amount,\n }: DelegationApprovedType,\n ): Promise {\n const decimals: number = await this.erc20Service.decimalsOf(\n debtTokenAddress,\n );\n const debtTokenContract: IDebtTokenBase =\n this.getContractInstance(debtTokenAddress);\n const delegatedAllowance: BigNumber =\n await debtTokenContract.borrowAllowance(\n allowanceGiver,\n allowanceReceiver,\n );\n const amountBNWithDecimals: BigNumber = BigNumber.from(\n valueToWei(amount, decimals),\n );\n\n return delegatedAllowance.gt(amountBNWithDecimals);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IDebtTokenBase } from './IDebtTokenBase';\n\nexport class IDebtTokenBase__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IDebtTokenBase {\n return new Contract(address, _abi, signerOrProvider) as IDebtTokenBase;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approveDelegation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'fromUser',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'toUser',\n type: 'address',\n },\n ],\n name: 'borrowAllowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { Provider } from '@ethersproject/providers';\nimport {\n BigNumber,\n Contract,\n PopulatedTransaction,\n providers,\n Signer,\n} from 'ethers';\nimport { estimateGasByNetwork } from './gasStation';\nimport {\n tEthereumAddress,\n TransactionGenerationMethod,\n transactionType,\n GasResponse,\n ProtocolAction,\n EthereumTransactionTypeExtended,\n eEthereumTxType,\n} from './types';\nimport { DEFAULT_NULL_VALUE_ON_TX, gasLimitRecommendations } from './utils';\n\nexport interface ContractsFactory {\n connect: (address: string, signerOrProvider: Signer | Provider) => Contract;\n}\n\nexport default class BaseService {\n readonly contractInstances: Record;\n\n readonly contractFactory: ContractsFactory;\n\n readonly provider: providers.Provider;\n\n constructor(provider: providers.Provider, contractFactory: ContractsFactory) {\n this.contractFactory = contractFactory;\n this.provider = provider;\n this.contractInstances = {};\n }\n\n public getContractInstance = (address: tEthereumAddress): T => {\n if (!this.contractInstances[address]) {\n this.contractInstances[address] = this.contractFactory.connect(\n address,\n this.provider,\n ) as T;\n }\n\n return this.contractInstances[address];\n };\n\n readonly generateTxCallback =\n ({\n rawTxMethod,\n from,\n value,\n gasSurplus,\n action,\n skipEstimation,\n }: TransactionGenerationMethod): (() => Promise) =>\n async () => {\n const txRaw: PopulatedTransaction = await rawTxMethod();\n\n const tx: transactionType = {\n ...txRaw,\n from,\n value: value ?? DEFAULT_NULL_VALUE_ON_TX,\n };\n\n tx.gasLimit = skipEstimation\n ? BigNumber.from('2')\n : await estimateGasByNetwork(tx, this.provider, gasSurplus);\n\n const gasRecommendation = action && gasLimitRecommendations[action];\n if (\n gasRecommendation &&\n tx.gasLimit.lte(BigNumber.from(gasRecommendation.limit))\n )\n tx.gasLimit = BigNumber.from(gasRecommendation.recommended);\n\n return tx;\n };\n\n readonly generateTxPriceEstimation =\n (\n txs: EthereumTransactionTypeExtended[],\n txCallback: () => Promise,\n action: string = ProtocolAction.default,\n ): GasResponse =>\n async (force = false) => {\n try {\n const gasPrice = await this.provider.getGasPrice();\n const hasPendingApprovals = txs.find(\n tx => tx.txType === eEthereumTxType.ERC20_APPROVAL,\n );\n if (!hasPendingApprovals || force) {\n const { gasLimit, gasPrice: gasPriceProv }: transactionType =\n await txCallback();\n if (!gasLimit) {\n // If we don't recieve the correct gas we throw a error\n throw new Error('Transaction calculation error');\n }\n\n return {\n gasLimit: gasLimit.toString(),\n gasPrice: gasPriceProv\n ? gasPriceProv.toString()\n : gasPrice.toString(),\n };\n }\n\n return {\n gasLimit: gasLimitRecommendations[action].recommended,\n gasPrice: gasPrice.toString(),\n };\n } catch (error: unknown) {\n console.error(\n 'Calculate error on calculate estimation gas price.',\n error,\n );\n return null;\n }\n };\n}\n","import { BigNumber, providers } from 'ethers';\nimport { transactionType, ChainId } from './types';\n\nconst DEFAULT_SURPLUS = 30; // 30%\n// polygon gas estimation is very off for some reason\nconst POLYGON_SURPLUS = 60; // 60%\n\nexport const estimateGas = async (\n tx: transactionType,\n provider: providers.Provider,\n gasSurplus?: number,\n): Promise => {\n const estimatedGas = await provider.estimateGas(tx);\n return estimatedGas.add(\n estimatedGas.mul(gasSurplus ?? DEFAULT_SURPLUS).div(100),\n );\n};\n\nexport const estimateGasByNetwork = async (\n tx: transactionType,\n provider: providers.Provider,\n gasSurplus?: number,\n): Promise => {\n const estimatedGas = await provider.estimateGas(tx);\n const providerNework: providers.Network = await provider.getNetwork();\n\n if (providerNework.chainId === ChainId.polygon) {\n return estimatedGas.add(estimatedGas.mul(POLYGON_SURPLUS).div(100));\n }\n\n return estimatedGas.add(\n estimatedGas.mul(gasSurplus ?? DEFAULT_SURPLUS).div(100),\n );\n};\n","import { base58 } from 'ethers/lib/utils';\nimport fetch from 'isomorphic-unfetch';\n\nexport function getLink(hash: string, gateway: string): string {\n return `${gateway}/${hash}`;\n}\n\nexport type ProposalMetadata = {\n title: string;\n description: string;\n shortDescription: string;\n ipfsHash: string;\n aip: number;\n discussions: string;\n author: string;\n};\n\ntype MemorizeMetadata = Record;\n\nconst MEMORIZE: MemorizeMetadata = {};\n\nexport async function getProposalMetadata(\n hash: string,\n gateway = 'https://cloudflare-ipfs.com/ipfs',\n): Promise {\n const ipfsHash = hash.startsWith('0x')\n ? base58.encode(Buffer.from(`1220${hash.slice(2)}`, 'hex'))\n : hash;\n if (MEMORIZE[ipfsHash]) return MEMORIZE[ipfsHash];\n try {\n const ipfsResponse: Response = await fetch(getLink(ipfsHash, gateway));\n if (!ipfsResponse.ok) {\n throw Error('Fetch not working');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const data: ProposalMetadata = await ipfsResponse.json();\n if (!data.title) {\n throw Error('Missing title field at proposal metadata.');\n }\n\n if (!data.description) {\n throw Error('Missing description field at proposal metadata.');\n }\n\n if (!data.shortDescription) {\n throw Error('Missing shortDescription field at proposal metadata.');\n }\n\n MEMORIZE[ipfsHash] = {\n ...data,\n ipfsHash,\n };\n return MEMORIZE[ipfsHash];\n } catch (e: unknown) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n console.error(`contract-helpers: IPFS fetch Error: ${e}`);\n return {\n ipfsHash,\n title: `Proposal - ${ipfsHash}`,\n description: `Proposal with invalid metadata format or IPFS gateway is down`,\n shortDescription: `Proposal with invalid metadata format or IPFS gateway is down`,\n aip: 0,\n author: `Proposal with invalid metadata format or IPFS gateway is down`,\n discussions: `Proposal with invalid metadata format or IPFS gateway is down`,\n };\n }\n}\n","import { BigNumber, BytesLike, PopulatedTransaction } from 'ethers';\n\nexport type tEthereumAddress = string;\nexport type ENS = string; // something.eth\n\n/** InterestRate options */\nexport enum InterestRate {\n None = 'None',\n Stable = 'Stable',\n Variable = 'Variable',\n}\n\nexport const ChainIdToNetwork: Record = {\n 1: 'mainnet',\n 3: 'ropsten',\n 42: 'kovan',\n 100: 'xDAI',\n 137: 'polygon',\n 80001: 'mumbai',\n 43114: 'avalanche',\n 43113: 'fuji',\n 42161: 'arbitrum_one',\n 421611: 'arbitrum_rinkeby',\n 592: 'astar',\n 336: 'shiden',\n 81: 'shibuya',\n};\n\nexport enum ChainId {\n mainnet = 1,\n ropsten = 3,\n kovan = 42,\n xdai = 100,\n polygon = 137,\n mumbai = 80001,\n avalanche = 43114,\n fuji = 43113, // avalanche test network\n arbitrum_one = 42161,\n arbitrum_rinkeby = 421611,\n astar = 592,\n shiden = 336,\n shibuya = 81,\n}\nexport type ConstantAddressesByNetwork = Record<\n string,\n {\n SYNTHETIX_PROXY_ADDRESS?: tEthereumAddress;\n }\n>;\n\nexport type MigratorConfig = {\n LEND_TO_AAVE_MIGRATOR: tEthereumAddress;\n};\n\nexport type LendingPoolMarketConfig = {\n LENDING_POOL: tEthereumAddress;\n LEVERAGER_ADDRESS?: tEthereumAddress;\n WETH_GATEWAY?: tEthereumAddress;\n};\n\nexport type LendingPoolConfig = Record<\n string,\n Record\n>;\n\nexport enum eEthereumTxType {\n ERC20_APPROVAL = 'ERC20_APPROVAL',\n DEBTERC20_APPROVAL = 'DEBTERC20_APPROVAL',\n DLP_ACTION = 'DLP_ACTION',\n GOVERNANCE_ACTION = 'GOVERNANCE_ACTION',\n GOV_DELEGATION_ACTION = 'GOV_DELEGATION_ACTION',\n STAKE_ACTION = 'STAKE_ACTION',\n MIGRATION_LEND_AAVE = 'MIGRATION_LEND_AAVE',\n FAUCET_MINT = 'FAUCET_MINT',\n REWARD_ACTION = 'REWARD_ACTION',\n}\n\nexport enum ProtocolAction {\n default = 'default',\n withdraw = 'withdraw',\n deposit = 'deposit',\n loop = 'loop',\n bid = 'bid',\n updateBid = 'updateBid',\n cancelBid = 'cancelBid',\n refundBid = 'refundBid',\n liquidationCall = 'liquidationCall',\n liquidationFlash = 'liquidationFlash',\n repay = 'repay',\n withdrawETH = 'withdrawETH',\n borrowETH = 'borrwoETH',\n}\n\nexport enum GovernanceVote {\n Abstain = 0,\n Yes = 1,\n No = 2,\n}\n\nexport enum Stake {\n sio2 = 'sio2',\n}\n\nexport type GasRecommendationType = Record<\n string,\n {\n limit: string;\n recommended: string;\n }\n>;\n\nexport type GeneratedTx = {\n tx: transactionType;\n gas: {\n price: string;\n limit: string;\n };\n};\n\nexport type transactionType = {\n value?: string;\n from?: string;\n to?: string;\n nonce?: number;\n gasLimit?: BigNumber;\n gasPrice?: BigNumber;\n data?: string;\n chainId?: number;\n};\n\nexport type AddressModel = {\n ADDRESS_PROVIDER_ADDRESS: tEthereumAddress;\n LENDINGPOOL_ADDRESS: tEthereumAddress;\n LENDINGPOOL_CORE_ADDRESS: tEthereumAddress;\n SYNTHETIX_PROXY_ADDRESS: tEthereumAddress;\n GOVERNANCE_PROTO_CONTRACT: tEthereumAddress;\n WETH_GATEWAY: tEthereumAddress;\n FAUCET: tEthereumAddress;\n AAVE_GOVERNANCE_V2: tEthereumAddress;\n AAVE_GOVERNANCE_V2_EXECUTOR_SHORT: tEthereumAddress;\n AAVE_GOVERNANCE_V2_EXECUTOR_LONG: tEthereumAddress;\n AAVE_GOVERNANCE_V2_HELPER: tEthereumAddress;\n INCENTIVES_CONTROLLER: tEthereumAddress;\n INCENTIVES_CONTROLLER_REWARD_TOKEN: tEthereumAddress;\n};\n\nexport type tCommonContractAddressBetweenMarkets = Pick<\n AddressModel,\n | 'SYNTHETIX_PROXY_ADDRESS'\n | 'GOVERNANCE_PROTO_CONTRACT'\n | 'WETH_GATEWAY'\n | 'FAUCET'\n | 'INCENTIVES_CONTROLLER'\n | 'INCENTIVES_CONTROLLER_REWARD_TOKEN'\n>;\n\nexport type tDistinctContractAddressBetweenMarkets = Pick<\n AddressModel,\n | 'ADDRESS_PROVIDER_ADDRESS'\n | 'LENDINGPOOL_ADDRESS'\n | 'LENDINGPOOL_CORE_ADDRESS'\n>;\n\nexport type tDistinctContractAddressBetweenMarketsV2 = Pick<\n AddressModel,\n 'LENDINGPOOL_ADDRESS'\n>;\n\nexport type tDistinctGovernanceV2Addresses = Pick<\n AddressModel,\n | 'AAVE_GOVERNANCE_V2'\n | 'AAVE_GOVERNANCE_V2_EXECUTOR_SHORT'\n | 'AAVE_GOVERNANCE_V2_EXECUTOR_LONG'\n | 'AAVE_GOVERNANCE_V2_HELPER'\n>;\n\nexport type tdistinctStakingAddressesBetweenTokens = {\n TOKEN_STAKING_ADDRESS: tEthereumAddress;\n STAKING_REWARD_TOKEN_ADDRESS: tEthereumAddress;\n STAKING_HELPER_ADDRESS: tEthereumAddress;\n canUsePermit: boolean;\n};\n\nexport type ContractAddresses = Record;\n\nexport type EthereumTransactionTypeExtended = {\n txType: eEthereumTxType;\n tx: () => Promise;\n gas: GasResponse;\n};\n\nexport type TransactionGenerationMethod = {\n rawTxMethod: () => Promise;\n from: tEthereumAddress;\n value?: string;\n gasSurplus?: number;\n action?: ProtocolAction;\n skipEstimation?: boolean;\n};\n\nexport type TransactionGasGenerationMethod = {\n txCallback: () => Promise;\n action?: ProtocolAction;\n};\n\nexport type GasType = {\n gasLimit: string | undefined;\n gasPrice: string;\n};\nexport type GasResponse = (force?: boolean) => Promise;\n\nexport type DefaultProviderKeys = {\n etherscan?: string;\n infura?: string;\n alchemy?: string;\n};\n\nexport type GovernanceConfigType = Record<\n string,\n tDistinctGovernanceV2Addresses\n>;\nexport type StakingConfigType = Record<\n string,\n Record\n>;\n\nexport type CommonConfigType = Record<\n string,\n tCommonContractAddressBetweenMarkets\n>;\n\nexport type LendingPoolConfigType = Record<\n string,\n Record\n>;\n\nexport type PermitSignature = {\n amount: string;\n deadline: string;\n v: number;\n r: BytesLike;\n s: BytesLike;\n};\n\nexport type FlashLoanParams = {\n assetToSwapToList: tEthereumAddress[]; // List of the addresses of the reserve to be swapped to and deposited\n minAmountsToReceive: string[]; // List of min amounts to be received from the swap\n swapAllBalance: boolean[]; // Flag indicating if all the user balance should be swapped\n permitAmount: string[]; // List of amounts for the permit signature\n deadline: string[]; // List of deadlines for the permit signature\n v: number[]; // List of v param for the permit signature\n r: BytesLike[]; // List of r param for the permit signature\n s: BytesLike[]; // List of s param for the permit signature\n};\n\nexport const SIO2_PRICE = '0.02';\n","import { BigNumber as BigNumberJs } from 'bignumber.js';\nimport { BigNumber, constants } from 'ethers';\nimport { GasRecommendationType, ProtocolAction } from './types';\n\nexport const valueToWei = (value: string, decimals: number): string => {\n return new BigNumberJs(value).shiftedBy(decimals).toFixed(0);\n};\n\nexport const canBeEnsAddress = (ensAddress: string): boolean => {\n return ensAddress.toLowerCase().endsWith('.eth');\n};\n\nexport const decimalsToCurrencyUnits = (\n value: string,\n decimals: number,\n): string => new BigNumberJs(value).shiftedBy(decimals * -1).toFixed();\n// .div(new BigNumberJs(10).pow(decimals)).toFixed();\n\nexport const getTxValue = (reserve: string, amount: string): string => {\n return reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()\n ? amount\n : DEFAULT_NULL_VALUE_ON_TX;\n};\n\nexport const DEFAULT_NULL_VALUE_ON_TX = BigNumber.from(0).toHexString();\nexport const DEFAULT_APPROVE_AMOUNT = constants.MaxUint256.toString();\nexport const MAX_UINT_AMOUNT =\n '115792089237316195423570985008687907853269984665640564039457584007913129639935';\nexport const SUPER_BIG_ALLOWANCE_NUMBER =\n '11579208923731619542357098500868790785326998466564056403945758400791';\nexport const API_ETH_MOCK_ADDRESS =\n '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';\nexport const uniswapEthAmount = '0.1';\nexport const SURPLUS = '0.05';\n\nexport const gasLimitRecommendations: GasRecommendationType = {\n [ProtocolAction.default]: {\n limit: '210000',\n recommended: '210000',\n },\n [ProtocolAction.deposit]: {\n limit: '300000',\n recommended: '300000',\n },\n [ProtocolAction.withdraw]: {\n limit: '230000',\n recommended: '300000',\n },\n [ProtocolAction.liquidationCall]: {\n limit: '700000',\n recommended: '700000',\n },\n [ProtocolAction.liquidationFlash]: {\n limit: '995000',\n recommended: '995000',\n },\n [ProtocolAction.repay]: {\n limit: '300000',\n recommended: '300000',\n },\n [ProtocolAction.borrowETH]: {\n limit: '450000',\n recommended: '450000',\n },\n [ProtocolAction.withdrawETH]: {\n limit: '640000',\n recommended: '640000',\n },\n [ProtocolAction.loop]: {\n limit: '4500000',\n recommended: '4500000',\n },\n [ProtocolAction.bid]: {\n limit: '4500000',\n recommended: '4500000',\n },\n [ProtocolAction.updateBid]: {\n limit: '4500000',\n recommended: '4500000',\n },\n [ProtocolAction.cancelBid]: {\n limit: '4500000',\n recommended: '4500000',\n },\n [ProtocolAction.refundBid]: {\n limit: '4500000',\n recommended: '4500000',\n },\n};\n\nexport const mintAmountsPerToken: Record = {\n AAVE: valueToWei('100', 18),\n BAT: valueToWei('100000', 18),\n BUSD: valueToWei('10000', 18),\n DAI: valueToWei('10000', 18),\n ENJ: valueToWei('100000', 18),\n KNC: valueToWei('10000', 18),\n LEND: valueToWei('1000', 18), // Not available on v2, but to support v1 faucet\n LINK: valueToWei('1000', 18),\n MANA: valueToWei('100000', 18),\n MKR: valueToWei('10', 18),\n WETH: valueToWei('10', 18),\n REN: valueToWei('10000', 18),\n REP: valueToWei('1000', 18),\n SNX: valueToWei('100', 18),\n SUSD: valueToWei('10000', 18),\n TUSD: '0', // The TusdMinter contract already mints the maximum\n UNI: valueToWei('1000', 18),\n USDC: valueToWei('10000', 6),\n USDT: valueToWei('10000', 6),\n WBTC: valueToWei('1', 8),\n YFI: valueToWei('1', 18),\n ZRX: valueToWei('100000', 18),\n UNIUSDC: valueToWei(uniswapEthAmount, 6),\n UNIDAI: valueToWei(uniswapEthAmount, 18),\n UNIUSDT: valueToWei(uniswapEthAmount, 6),\n UNIDAIETH: valueToWei(uniswapEthAmount, 18),\n UNIUSDCETH: valueToWei(uniswapEthAmount, 18),\n UNISETHETH: valueToWei(uniswapEthAmount, 18),\n UNILENDETH: valueToWei(uniswapEthAmount, 18),\n UNILINKETH: valueToWei(uniswapEthAmount, 18),\n UNIMKRETH: valueToWei(uniswapEthAmount, 18),\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable prefer-rest-params */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { utils } from 'ethers';\nimport {\n amount0OrPositiveValidator,\n amountGtThan0OrMinus1,\n amountGtThan0Validator,\n isEthAddressArrayValidator,\n // isEthAddressArrayValidatorNotEmpty,\n isEthAddressOrEnsValidator,\n isEthAddressValidator,\n // optionalValidator,\n} from './validations';\n\nexport function LPValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n // @ts-expect-error todo: check why this ignore is needed\n if (!utils.isAddress(this.lendingPoolAddress)) {\n console.error(`[LendingPoolValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n amountGtThan0OrMinus1(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function LeveragerValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n // @ts-expect-error todo: check why this ignore is needed\n if (!utils.isAddress(this.leveragerAddress)) {\n console.error(`[LeveragerValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function LaunchpadValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n // @ts-expect-error todo: check why this ignore is needed\n if (!utils.isAddress(this.launchpadAddress)) {\n console.error(`[LaunchpadValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\n// export function LTAMigratorValidator(\n// target: any,\n// propertyName: string,\n// descriptor: TypedPropertyDescriptor,\n// ): any {\n// const method = descriptor.value;\n// descriptor.value = function () {\n// const LEND_TO_AAVE_MIGRATOR =\n// // @ts-expect-error todo: check why this ignore is needed\n// this.migratorConfig?.LEND_TO_AAVE_MIGRATOR || '';\n\n// if (!utils.isAddress(LEND_TO_AAVE_MIGRATOR)) {\n// console.error(`[MigratorValidator] You need to pass valid addresses`);\n// return [];\n// }\n\n// isEthAddressValidator(target, propertyName, arguments);\n\n// amountGtThan0Validator(target, propertyName, arguments);\n\n// return method?.apply(this, arguments);\n// };\n// }\n\nexport function IncentivesValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n isEthAddressValidator(target, propertyName, arguments);\n\n isEthAddressArrayValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function DebtTokenValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function SynthetixValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function ERC20Validator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n amountGtThan0OrMinus1(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function StakingValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n if (\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.stakingContractAddress)\n ) {\n console.error(`[StakingValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function SignStakingValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n if (\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.stakingContractAddress) ||\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.stakingHelperContractAddress)\n ) {\n console.error(`[StakingValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function FaucetValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n // @ts-expect-error todo: check why this ignore is needed\n if (!utils.isAddress(this.faucetAddress)) {\n console.error(`[FaucetValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function WETHValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n // @ts-expect-error todo: check why this ignore is needed\n if (!utils.isAddress(this.wethGatewayAddress)) {\n console.error(`[WethGatewayValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amountGtThan0Validator(target, propertyName, arguments);\n\n amountGtThan0OrMinus1(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function GovHelperValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n if (\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.aaveGovernanceV2Address) ||\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.aaveGovernanceV2HelperAddress)\n ) {\n console.error(`[GovernanceValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n isEthAddressArrayValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function GovValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n if (\n // @ts-expect-error todo: check why this ignore is needed\n !utils.isAddress(this.aaveGovernanceV2Address)\n ) {\n console.error(`[GovernanceValidator] You need to pass valid addresses`);\n return [];\n }\n\n isEthAddressValidator(target, propertyName, arguments);\n\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n\nexport function GovDelegationValidator(\n target: any,\n propertyName: string,\n descriptor: TypedPropertyDescriptor,\n): any {\n const method = descriptor.value;\n descriptor.value = function () {\n isEthAddressValidator(target, propertyName, arguments);\n isEthAddressOrEnsValidator(target, propertyName, arguments);\n amountGtThan0Validator(target, propertyName, arguments);\n amount0OrPositiveValidator(target, propertyName, arguments);\n\n return method.apply(this, arguments);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport 'reflect-metadata';\n\nexport const isEthAddressMetadataKey = Symbol('ethAddress');\nexport const isEthAddressArrayMetadataKey = Symbol('ethAddressArray');\nexport const isEthAddressOrENSMetadataKey = Symbol('ethOrENSAddress');\nexport const isPositiveMetadataKey = Symbol('isPositive');\nexport const isPositiveOrMinusOneMetadataKey = Symbol('isPositiveOrMinusOne');\nexport const is0OrPositiveMetadataKey = Symbol('is0OrPositiveMetadataKey');\nexport const optionalMetadataKey = Symbol('Optional');\nexport const isEthAddressArrayMetadataKeyNotEmpty = Symbol(\n 'isEthAddressArrayMetadataKeyNotEmpty',\n);\n\nexport type paramsType = {\n index: number;\n field: string | undefined;\n};\n\nexport function isEthAddress(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const existingPossibleAddresses: paramsType[] =\n Reflect.getOwnMetadata(isEthAddressMetadataKey, target, propertyKey) ||\n [];\n\n existingPossibleAddresses.push({\n index: parameterIndex,\n field,\n });\n\n Reflect.defineMetadata(\n isEthAddressMetadataKey,\n existingPossibleAddresses,\n target,\n propertyKey,\n );\n };\n}\n\nexport function isEthAddressArray(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const existingPossibleAddresses: paramsType[] =\n Reflect.getOwnMetadata(\n isEthAddressArrayMetadataKey,\n target,\n propertyKey,\n ) || [];\n\n existingPossibleAddresses.push({\n index: parameterIndex,\n field,\n });\n\n Reflect.defineMetadata(\n isEthAddressArrayMetadataKey,\n existingPossibleAddresses,\n target,\n propertyKey,\n );\n };\n}\n\n// export function isNotEmptyEthAddressArray(field?: string) {\n// return function (\n// target: any,\n// propertyKey: string | symbol,\n// parameterIndex: number,\n// ): void {\n// const existingPossibleAddresses: paramsType[] =\n// Reflect.getOwnMetadata(\n// isEthAddressArrayMetadataKeyNotEmpty,\n// target,\n// propertyKey,\n// ) || [];\n\n// existingPossibleAddresses.push({\n// index: parameterIndex,\n// field,\n// });\n\n// Reflect.defineMetadata(\n// isEthAddressArrayMetadataKeyNotEmpty,\n// existingPossibleAddresses,\n// target,\n// propertyKey,\n// );\n// };\n// }\n\nexport function isEthAddressOrENS(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const existingPossibleAddresses: paramsType[] =\n Reflect.getOwnMetadata(\n isEthAddressOrENSMetadataKey,\n target,\n propertyKey,\n ) || [];\n\n existingPossibleAddresses.push({\n index: parameterIndex,\n field,\n });\n\n Reflect.defineMetadata(\n isEthAddressOrENSMetadataKey,\n existingPossibleAddresses,\n target,\n propertyKey,\n );\n };\n}\n\nexport function isPositiveAmount(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const params: paramsType[] =\n Reflect.getOwnMetadata(isPositiveMetadataKey, target, propertyKey) || [];\n\n params.push({ index: parameterIndex, field });\n\n Reflect.defineMetadata(isPositiveMetadataKey, params, target, propertyKey);\n };\n}\n\nexport function is0OrPositiveAmount(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const params: paramsType[] =\n Reflect.getOwnMetadata(is0OrPositiveMetadataKey, target, propertyKey) ||\n [];\n\n params.push({ index: parameterIndex, field });\n\n Reflect.defineMetadata(\n is0OrPositiveMetadataKey,\n params,\n target,\n propertyKey,\n );\n };\n}\n\nexport function isPositiveOrMinusOneAmount(field?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ): void {\n const params: paramsType[] =\n Reflect.getOwnMetadata(\n isPositiveOrMinusOneMetadataKey,\n target,\n propertyKey,\n ) || [];\n\n params.push({ index: parameterIndex, field });\n\n Reflect.defineMetadata(\n isPositiveOrMinusOneMetadataKey,\n params,\n target,\n propertyKey,\n );\n };\n}\n\n// export function optional(\n// target: any,\n// propertyKey: string | symbol,\n// parameterIndex: number,\n// ): void {\n// const existingOptionalParameters =\n// Reflect.getOwnMetadata(optionalMetadataKey, target, propertyKey) || [];\n// existingOptionalParameters.push(parameterIndex);\n// Reflect.defineMetadata(\n// optionalMetadataKey,\n// existingOptionalParameters,\n// target,\n// propertyKey,\n// );\n// }\n","/* eslint-disable @typescript-eslint/restrict-template-expressions */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { utils } from 'ethers';\nimport { canBeEnsAddress } from '../utils';\n// import { canBeEnsAddress } from '../../commons/utils';\n// import 'reflect-metadata';\nimport {\n is0OrPositiveMetadataKey,\n isEthAddressArrayMetadataKey,\n isEthAddressMetadataKey,\n isPositiveMetadataKey,\n isPositiveOrMinusOneMetadataKey,\n // optionalMetadataKey,\n paramsType,\n isEthAddressArrayMetadataKeyNotEmpty,\n isEthAddressOrENSMetadataKey,\n} from './paramValidators';\n\n// export function optionalValidator(\n// target: any,\n// propertyName: string,\n// methodArguments: any,\n// ): boolean[] {\n// const optionalParameters = Reflect.getOwnMetadata(\n// optionalMetadataKey,\n// target,\n// propertyName,\n// );\n\n// const isParamOptional: boolean[] = [];\n// if (optionalParameters) {\n// optionalParameters.forEach((parameterIndex: number) => {\n// if (methodArguments[parameterIndex] === null) {\n// isParamOptional[parameterIndex] = true;\n// }\n// });\n// }\n\n// return isParamOptional;\n// }\n\nexport function isEthAddressValidator(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const addressParameters: paramsType[] = Reflect.getOwnMetadata(\n isEthAddressMetadataKey,\n target,\n propertyName,\n );\n\n if (addressParameters) {\n addressParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (\n methodArguments[0][storedParams.field] &&\n !utils.isAddress(methodArguments[0][storedParams.field])\n ) {\n throw new Error(\n `Address: ${\n methodArguments[0][storedParams.field]\n } is not a valid ethereum Address`,\n );\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (\n methodArguments[storedParams.index] &&\n !isOptional &&\n !utils.isAddress(methodArguments[storedParams.index])\n ) {\n throw new Error(\n `Address: ${\n methodArguments[storedParams.index]\n } is not a valid ethereum Address`,\n );\n }\n }\n });\n }\n}\n\nexport function isEthAddressArrayValidator(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const addressParameters: paramsType[] = Reflect.getOwnMetadata(\n isEthAddressArrayMetadataKey,\n target,\n propertyName,\n );\n\n if (addressParameters) {\n addressParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (methodArguments[0][storedParams.field]) {\n if (methodArguments[0][storedParams.field].length > 0) {\n const fieldArray = methodArguments[0][storedParams.field];\n fieldArray.forEach((address: string) => {\n if (!utils.isAddress(address)) {\n throw new Error(\n `Address: ${address} is not a valid ethereum Address`,\n );\n }\n });\n }\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (methodArguments[storedParams.index] && !isOptional) {\n if (methodArguments[storedParams.index].length > 0) {\n const fieldArray = methodArguments[storedParams.index];\n fieldArray.forEach((address: string) => {\n if (!utils.isAddress(address)) {\n throw new Error(\n `Address: ${address} is not a valid ethereum Address`,\n );\n }\n });\n }\n }\n }\n });\n }\n}\n\nexport function isEthAddressArrayValidatorNotEmpty(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const addressParameters: paramsType[] = Reflect.getOwnMetadata(\n isEthAddressArrayMetadataKeyNotEmpty,\n target,\n propertyName,\n );\n\n if (addressParameters) {\n addressParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (methodArguments[0][storedParams.field]) {\n if (methodArguments[0][storedParams.field].length > 0) {\n const fieldArray = methodArguments[0][storedParams.field];\n fieldArray.forEach((address: string) => {\n if (!utils.isAddress(address)) {\n throw new Error(\n `Address: ${address} is not a valid ethereum Address`,\n );\n }\n });\n } else {\n throw new Error('Addresses Array should not be empty');\n }\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (methodArguments[storedParams.index] && !isOptional) {\n if (methodArguments[storedParams.index].length > 0) {\n const fieldArray = methodArguments[storedParams.index];\n fieldArray.forEach((address: string) => {\n if (!utils.isAddress(address)) {\n throw new Error(\n `Address: ${address} is not a valid ethereum Address`,\n );\n }\n });\n } else {\n throw new Error('Addresses Array should not be empty');\n }\n }\n }\n });\n }\n}\n\nexport function isEthAddressOrEnsValidator(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const addressParameters: paramsType[] = Reflect.getOwnMetadata(\n isEthAddressOrENSMetadataKey,\n target,\n propertyName,\n );\n\n if (addressParameters) {\n addressParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (\n methodArguments[0][storedParams.field] &&\n !utils.isAddress(methodArguments[0][storedParams.field])\n ) {\n if (!canBeEnsAddress(methodArguments[0][storedParams.field])) {\n throw new Error(\n `Address ${\n methodArguments[0][storedParams.field]\n } is not valid ENS format or a valid ethereum Address`,\n );\n }\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (\n methodArguments[storedParams.index] &&\n !isOptional &&\n !utils.isAddress(methodArguments[storedParams.index])\n ) {\n if (!canBeEnsAddress(methodArguments[storedParams.index])) {\n throw new Error(\n `Address ${\n methodArguments[storedParams.index]\n } is not valid ENS format or a valid ethereum Address`,\n );\n }\n }\n }\n });\n }\n}\n\nexport function amountGtThan0Validator(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const amountParameters: paramsType[] = Reflect.getOwnMetadata(\n isPositiveMetadataKey,\n target,\n propertyName,\n );\n\n if (amountParameters) {\n amountParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (\n methodArguments[0][storedParams.field] &&\n !(Number(methodArguments[0][storedParams.field]) > 0)\n ) {\n throw new Error(\n `Amount: ${\n methodArguments[0][storedParams.field]\n } needs to be greater than 0`,\n );\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (!isOptional && !(Number(methodArguments[storedParams.index]) > 0)) {\n throw new Error(\n `Amount: ${\n methodArguments[storedParams.index]\n } needs to be greater than 0`,\n );\n }\n }\n });\n }\n}\n\nexport function amount0OrPositiveValidator(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const amountParameters: paramsType[] = Reflect.getOwnMetadata(\n is0OrPositiveMetadataKey,\n target,\n propertyName,\n );\n\n if (amountParameters) {\n amountParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (\n methodArguments[0][storedParams.field] &&\n !(Number(methodArguments[0][storedParams.field]) >= 0)\n ) {\n throw new Error(\n `Amount: ${\n methodArguments[0][storedParams.field]\n } needs to be greater or equal than 0`,\n );\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (\n !isOptional &&\n !(Number(methodArguments[storedParams.index]) >= 0)\n ) {\n throw new Error(\n `Amount: ${\n methodArguments[storedParams.index]\n } needs to be greater or equal than 0`,\n );\n }\n }\n });\n }\n}\n\nexport function amountGtThan0OrMinus1(\n target: any,\n propertyName: string,\n methodArguments: any,\n isParamOptional?: boolean[],\n): void {\n const amountMinusOneParameters: paramsType[] = Reflect.getOwnMetadata(\n isPositiveOrMinusOneMetadataKey,\n target,\n propertyName,\n );\n\n if (amountMinusOneParameters) {\n amountMinusOneParameters.forEach(storedParams => {\n if (storedParams.field) {\n if (\n methodArguments[0][storedParams.field] &&\n !(\n Number(methodArguments[0][storedParams.field]) > 0 ||\n methodArguments[0][storedParams.field] === '-1'\n )\n ) {\n throw new Error(\n `Amount: ${\n methodArguments[0][storedParams.field]\n } needs to be greater than 0 or -1`,\n );\n }\n } else {\n const isOptional = isParamOptional?.[storedParams.index];\n if (\n !isOptional &&\n !(\n Number(methodArguments[storedParams.index]) > 0 ||\n methodArguments[storedParams.index] === '-1'\n )\n ) {\n throw new Error(\n `Amount: ${\n methodArguments[storedParams.index]\n } needs to be greater than 0 or -1`,\n );\n }\n }\n });\n }\n}\n","import { BigNumber, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport { valueToWei, API_ETH_MOCK_ADDRESS } from '../commons/utils';\nimport { ERC20Validator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport { DebtERC20 } from './typechain/DebtERC20';\nimport { DebtERC20__factory } from './typechain/DebtERC20__factory';\n\nexport interface IDebtERC20ServiceInterface {\n decimalsOf: (token: tEthereumAddress) => Promise;\n approveDelegation(args: ApproveType): EthereumTransactionTypeExtended;\n isDelegated(args: ApproveType): Promise;\n}\n\nexport type ApproveType = {\n user: tEthereumAddress;\n token: tEthereumAddress;\n delegatee: tEthereumAddress;\n amount: string;\n};\n\nexport class DebtERC20Service\n extends BaseService\n implements IDebtERC20ServiceInterface\n{\n readonly tokenDecimals: Record;\n\n constructor(provider: providers.Provider) {\n super(provider, DebtERC20__factory);\n this.tokenDecimals = {};\n this.decimalsOf = this.decimalsOf.bind(this);\n this.approveDelegation = this.approveDelegation.bind(this);\n this.isDelegated = this.isDelegated.bind(this);\n }\n\n @ERC20Validator\n public approveDelegation(\n @isEthAddress('user')\n @isEthAddress('token')\n @isEthAddress('delegatee')\n @isPositiveAmount('amount')\n { user, token, delegatee, amount }: ApproveType,\n ): EthereumTransactionTypeExtended {\n const debtErc20Contract: DebtERC20 = this.getContractInstance(token);\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n debtErc20Contract.populateTransaction.approveDelegation(\n delegatee,\n amount,\n ),\n from: user,\n });\n return {\n tx: txCallback,\n txType: eEthereumTxType.DEBTERC20_APPROVAL,\n gas: this.generateTxPriceEstimation([], txCallback),\n };\n }\n\n @ERC20Validator\n public async isDelegated(\n @isEthAddress('user')\n @isEthAddress('token')\n @isEthAddress('delegatee')\n @isPositiveAmount('amount')\n { user, token, delegatee, amount }: ApproveType,\n ): Promise {\n if (token.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) return true;\n const decimals = await this.decimalsOf(token);\n const debtErc20Contract: DebtERC20 = this.getContractInstance(token);\n const allowance: BigNumber = await debtErc20Contract.borrowAllowance(\n user,\n delegatee,\n );\n const amountBNWithDecimals: BigNumber = BigNumber.from(\n valueToWei(amount, decimals),\n );\n return allowance.gte(amountBNWithDecimals);\n }\n\n @ERC20Validator\n public async decimalsOf(\n @isEthAddress() token: tEthereumAddress,\n ): Promise {\n if (token.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) return 18;\n\n if (!this.tokenDecimals[token]) {\n const erc20Contract = this.getContractInstance(token);\n this.tokenDecimals[token] = await erc20Contract.decimals();\n }\n\n return this.tokenDecimals[token];\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\nimport type { DebtERC20 } from './DebtERC20';\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'fromUser',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'toUser',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'BorrowAllowanceDelegated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approveDelegation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'fromUser',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'toUser',\n type: 'address',\n },\n ],\n name: 'borrowAllowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'subtractedValue',\n type: 'uint256',\n },\n ],\n name: 'decreaseAllowance',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'addedValue',\n type: 'uint256',\n },\n ],\n name: 'increaseAllowance',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n\nexport class DebtERC20__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): DebtERC20 {\n return new Contract(address, _abi, signerOrProvider) as DebtERC20;\n }\n}\n","import { BigNumber, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport {\n API_ETH_MOCK_ADDRESS,\n valueToWei,\n SUPER_BIG_ALLOWANCE_NUMBER,\n} from '../commons/utils';\nimport { ERC20Validator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n isPositiveOrMinusOneAmount,\n} from '../commons/validators/paramValidators';\nimport { IERC20Detailed } from './typechain/IERC20Detailed';\nimport { IERC20Detailed__factory } from './typechain/IERC20Detailed__factory';\n\nexport interface IERC20ServiceInterface {\n decimalsOf: (token: tEthereumAddress) => Promise;\n getTokenData: (token: tEthereumAddress) => Promise;\n isApproved: (args: ApproveType) => Promise;\n approve: (args: ApproveType) => EthereumTransactionTypeExtended;\n}\n\nexport type ApproveType = {\n user: tEthereumAddress;\n token: tEthereumAddress;\n spender: tEthereumAddress;\n amount: string;\n};\n\nexport type TokenMetadataType = {\n name: string;\n symbol: string;\n decimals: number;\n address: string;\n};\nexport class ERC20Service\n extends BaseService\n implements IERC20ServiceInterface\n{\n readonly tokenDecimals: Record;\n\n readonly tokenMetadata: Record;\n\n constructor(provider: providers.Provider) {\n super(provider, IERC20Detailed__factory);\n this.tokenDecimals = {};\n this.tokenMetadata = {};\n\n this.approve = this.approve.bind(this);\n this.isApproved = this.isApproved.bind(this);\n this.getTokenData = this.getTokenData.bind(this);\n this.decimalsOf = this.decimalsOf.bind(this);\n }\n\n @ERC20Validator\n public approve(\n @isEthAddress('user')\n @isEthAddress('token')\n @isEthAddress('spender')\n @isPositiveAmount('amount')\n { user, token, spender, amount }: ApproveType,\n ): EthereumTransactionTypeExtended {\n const erc20Contract: IERC20Detailed = this.getContractInstance(token);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n erc20Contract.populateTransaction.approve(spender, amount),\n from: user,\n });\n\n return {\n tx: txCallback,\n txType: eEthereumTxType.ERC20_APPROVAL,\n gas: this.generateTxPriceEstimation([], txCallback),\n };\n }\n\n @ERC20Validator\n public async isApproved(\n @isEthAddress('user')\n @isEthAddress('token')\n @isEthAddress('spender')\n @isPositiveOrMinusOneAmount('amount')\n { user, token, spender, amount }: ApproveType,\n ): Promise {\n if (token.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) return true;\n const decimals = await this.decimalsOf(token);\n const erc20Contract: IERC20Detailed = this.getContractInstance(token);\n const allowance: BigNumber = await erc20Contract.allowance(user, spender);\n const amountBNWithDecimals: BigNumber =\n amount === '-1'\n ? BigNumber.from(SUPER_BIG_ALLOWANCE_NUMBER)\n : BigNumber.from(valueToWei(amount, decimals));\n return allowance.gte(amountBNWithDecimals);\n }\n\n @ERC20Validator\n public async decimalsOf(\n @isEthAddress() token: tEthereumAddress,\n ): Promise {\n if (token.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) return 18;\n if (!this.tokenDecimals[token]) {\n const erc20Contract = this.getContractInstance(token);\n this.tokenDecimals[token] = await erc20Contract.decimals();\n }\n\n return this.tokenDecimals[token];\n }\n\n @ERC20Validator\n public async getTokenData(\n @isEthAddress() token: tEthereumAddress,\n ): Promise {\n if (token.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) {\n return {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18,\n address: token,\n };\n }\n\n // Needed because MKR does not return string for symbol and Name\n if (\n token.toLowerCase() ===\n '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2'.toLowerCase()\n ) {\n return {\n name: 'Maker',\n symbol: 'MKR',\n decimals: 18,\n address: token,\n };\n }\n\n if (!this.tokenMetadata[token]) {\n const { name: nameGetter, symbol: symbolGetter }: IERC20Detailed =\n this.getContractInstance(token);\n\n const [name, symbol, decimals]: [string, string, number] =\n await Promise.all([\n nameGetter(),\n symbolGetter(),\n this.decimalsOf(token),\n ]);\n\n this.tokenMetadata[token] = {\n name,\n symbol,\n decimals,\n address: token,\n };\n }\n\n return this.tokenMetadata[token];\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IERC20Detailed } from './IERC20Detailed';\n\nexport class IERC20Detailed__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IERC20Detailed {\n return new Contract(address, _abi, signerOrProvider) as IERC20Detailed;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n LendingPoolMarketConfig,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport { DEFAULT_NULL_VALUE_ON_TX } from '../commons/utils';\nimport { FaucetValidator } from '../commons/validators/methodValidators';\nimport { isEthAddress } from '../commons/validators/paramValidators';\nimport { IFaucet } from './typechain/IFaucet';\nimport { IFaucet__factory } from './typechain/IFaucet__factory';\n\nexport type FaucetParamsType = {\n userAddress: tEthereumAddress;\n tokenSymbol: string;\n};\n\nexport interface FaucetInterface {\n claim: (args: FaucetParamsType) => EthereumTransactionTypeExtended[];\n}\n\nexport class FaucetService\n extends BaseService\n implements FaucetInterface\n{\n readonly faucetAddress: string;\n\n readonly faucetConfig: LendingPoolMarketConfig | undefined;\n\n constructor(provider: providers.Provider, faucetAddress?: string) {\n super(provider, IFaucet__factory);\n\n this.faucetAddress = faucetAddress ?? '';\n }\n\n @FaucetValidator\n public claim(\n @isEthAddress('userAddress')\n { userAddress, tokenSymbol }: FaucetParamsType,\n ): EthereumTransactionTypeExtended[] {\n const faucetContract = this.getContractInstance(this.faucetAddress);\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n faucetContract.populateTransaction.claim(tokenSymbol),\n from: userAddress,\n value: DEFAULT_NULL_VALUE_ON_TX,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.FAUCET_MINT,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IFaucet } from './IFaucet';\n\nexport class IFaucet__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IFaucet {\n return new Contract(address, _abi, signerOrProvider) as IFaucet;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: 'string',\n name: 'asset',\n type: 'string',\n },\n {\n internalType: 'address',\n name: 'addr',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'frozenDuration',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'maxToClaimed',\n type: 'uint256',\n },\n ],\n internalType: 'struct IFaucet.ClaimAssetsInfo[]',\n name: '_assets',\n type: 'tuple[]',\n },\n ],\n name: 'addAssets',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'string',\n name: '_asset',\n type: 'string',\n },\n ],\n name: 'claim',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","import { providers } from 'ethers';\nimport { formatEther } from 'ethers/lib/utils';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n transactionType,\n} from '../commons/types';\nimport {\n GovHelperValidator,\n GovValidator,\n} from '../commons/validators/methodValidators';\nimport {\n is0OrPositiveAmount,\n isEthAddress,\n isEthAddressArray,\n} from '../commons/validators/paramValidators';\nimport { IAaveGovernanceV2 } from './typechain/IAaveGovernanceV2';\nimport { IAaveGovernanceV2__factory } from './typechain/IAaveGovernanceV2__factory';\nimport { IGovernanceStrategy } from './typechain/IGovernanceStrategy';\nimport { IGovernanceStrategy__factory } from './typechain/IGovernanceStrategy__factory';\nimport { IGovernanceV2Helper } from './typechain/IGovernanceV2Helper';\nimport { IGovernanceV2Helper__factory } from './typechain/IGovernanceV2Helper__factory';\nimport {\n GovGetProposalsType,\n GovGetProposalType,\n GovGetVotingAtBlockType,\n GovSubmitVoteType,\n GovGetTokensVotingPower as GovGetPower,\n GovGetVoteOnProposal,\n Proposal,\n ProposalState,\n Power,\n ProposalRPC,\n Vote,\n} from './types';\n\nexport const humanizeProposal = (rawProposal: ProposalRPC): Proposal => {\n return {\n id: Number(rawProposal.id.toString()),\n creator: rawProposal.creator,\n executor: rawProposal.executor,\n targets: rawProposal.targets,\n values: rawProposal.values,\n signatures: rawProposal.signatures,\n calldatas: rawProposal.calldatas,\n withDelegatecalls: rawProposal.withDelegatecalls,\n startBlock: Number(rawProposal.startBlock.toString()),\n endBlock: Number(rawProposal.endBlock.toString()),\n executionTime: rawProposal.executionTime.toString(),\n forVotes: rawProposal.forVotes.toString(),\n againstVotes: rawProposal.againstVotes.toString(),\n executed: rawProposal.executed,\n canceled: rawProposal.canceled,\n strategy: rawProposal.strategy,\n state: Object.values(ProposalState)[rawProposal.proposalState],\n minimumQuorum: rawProposal.minimumQuorum.toString(),\n minimumDiff: rawProposal.minimumDiff.toString(),\n executionTimeWithGracePeriod:\n rawProposal.executionTimeWithGracePeriod.toString(),\n proposalCreated: Number(rawProposal.proposalCreated.toString()),\n totalVotingSupply: rawProposal.totalVotingSupply.toString(),\n ipfsHash: rawProposal.ipfsHash,\n };\n};\n\nexport interface AaveGovernanceInterface {\n submitVote: (args: GovSubmitVoteType) => EthereumTransactionTypeExtended[];\n getProposal: (args: GovGetProposalType) => Promise;\n getProposals: (args: GovGetProposalsType) => Promise;\n getVotingPowerAt: (args: GovGetVotingAtBlockType) => Promise;\n getTokensPower: (args: GovGetPower) => Promise;\n getVoteOnProposal: (args: GovGetVoteOnProposal) => Promise;\n}\n\ntype AaveGovernanceServiceConfig = {\n GOVERNANCE_ADDRESS: string;\n GOVERNANCE_HELPER_ADDRESS?: string;\n ipfsGateway?: string;\n};\n\nexport class AaveGovernanceService\n extends BaseService\n implements AaveGovernanceInterface\n{\n readonly aaveGovernanceV2Address: string;\n\n readonly aaveGovernanceV2HelperAddress: string;\n\n constructor(\n provider: providers.Provider,\n config: AaveGovernanceServiceConfig,\n ) {\n super(provider, IAaveGovernanceV2__factory);\n\n this.aaveGovernanceV2Address = config.GOVERNANCE_ADDRESS;\n this.aaveGovernanceV2HelperAddress = config.GOVERNANCE_HELPER_ADDRESS ?? '';\n }\n\n @GovValidator\n public submitVote(\n @isEthAddress('user')\n @is0OrPositiveAmount('proposalId')\n { user, proposalId, support }: GovSubmitVoteType,\n ): EthereumTransactionTypeExtended[] {\n const txs: EthereumTransactionTypeExtended[] = [];\n const govContract: IAaveGovernanceV2 = this.getContractInstance(\n this.aaveGovernanceV2Address,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n govContract.populateTransaction.submitVote(proposalId, support),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.GOVERNANCE_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n return txs;\n }\n\n @GovHelperValidator\n public async getProposals({\n skip,\n limit,\n }: GovGetProposalsType): Promise {\n const helper: IGovernanceV2Helper = IGovernanceV2Helper__factory.connect(\n this.aaveGovernanceV2HelperAddress,\n this.provider,\n );\n const result = await helper.getProposals(\n skip.toString(),\n limit.toString(),\n this.aaveGovernanceV2Address,\n );\n\n return result.map(proposal => humanizeProposal(proposal));\n }\n\n @GovHelperValidator\n public async getProposal(\n @is0OrPositiveAmount('proposalId')\n { proposalId }: GovGetProposalType,\n ) {\n const helper: IGovernanceV2Helper = IGovernanceV2Helper__factory.connect(\n this.aaveGovernanceV2HelperAddress,\n this.provider,\n );\n const result = await helper.getProposal(\n proposalId,\n this.aaveGovernanceV2Address,\n );\n\n return humanizeProposal(result);\n }\n\n @GovValidator\n public async getVotingPowerAt(\n @isEthAddress('user') { user, block, strategy }: GovGetVotingAtBlockType,\n ): Promise {\n const proposalStrategy: IGovernanceStrategy =\n IGovernanceStrategy__factory.connect(strategy, this.provider);\n\n const power = await proposalStrategy.getVotingPowerAt(\n user,\n block.toString(),\n );\n return formatEther(power);\n }\n\n @GovHelperValidator\n public async getTokensPower(\n @isEthAddress('user')\n @isEthAddressArray('tokens')\n { user, tokens }: GovGetPower,\n ): Promise {\n const helper: IGovernanceV2Helper = IGovernanceV2Helper__factory.connect(\n this.aaveGovernanceV2HelperAddress,\n this.provider,\n );\n\n return helper.getTokensPower(user, tokens);\n }\n\n @GovValidator\n public async getVoteOnProposal(\n @isEthAddress('user')\n @is0OrPositiveAmount('proposalId')\n { proposalId, user }: GovGetVoteOnProposal,\n ): Promise {\n const govContract: IAaveGovernanceV2 = this.getContractInstance(\n this.aaveGovernanceV2Address,\n );\n return govContract.getVoteOnProposal(proposalId, user);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IAaveGovernanceV2 } from './IAaveGovernanceV2';\n\nexport class IAaveGovernanceV2__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IAaveGovernanceV2 {\n return new Contract(address, _abi, signerOrProvider) as IAaveGovernanceV2;\n }\n}\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'executor',\n type: 'address',\n },\n ],\n name: 'ExecutorAuthorized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'executor',\n type: 'address',\n },\n ],\n name: 'ExecutorUnauthorized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'newStrategy',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'initiatorChange',\n type: 'address',\n },\n ],\n name: 'GovernanceStrategyChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n ],\n name: 'ProposalCanceled',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'creator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'contract IExecutorWithTimelock',\n name: 'executor',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address[]',\n name: 'targets',\n type: 'address[]',\n },\n {\n indexed: false,\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n indexed: false,\n internalType: 'string[]',\n name: 'signatures',\n type: 'string[]',\n },\n {\n indexed: false,\n internalType: 'bytes[]',\n name: 'calldatas',\n type: 'bytes[]',\n },\n {\n indexed: false,\n internalType: 'bool[]',\n name: 'withDelegatecalls',\n type: 'bool[]',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'startBlock',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'endBlock',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'strategy',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bytes32',\n name: 'ipfsHash',\n type: 'bytes32',\n },\n ],\n name: 'ProposalCreated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'initiatorExecution',\n type: 'address',\n },\n ],\n name: 'ProposalExecuted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'executionTime',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'initiatorQueueing',\n type: 'address',\n },\n ],\n name: 'ProposalQueued',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'voter',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'support',\n type: 'bool',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'votingPower',\n type: 'uint256',\n },\n ],\n name: 'VoteEmitted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newVotingDelay',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'initiatorChange',\n type: 'address',\n },\n ],\n name: 'VotingDelayChanged',\n type: 'event',\n },\n {\n inputs: [],\n name: '__abdicate',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'executors',\n type: 'address[]',\n },\n ],\n name: 'authorizeExecutors',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n ],\n name: 'cancel',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract IExecutorWithTimelock',\n name: 'executor',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'targets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'string[]',\n name: 'signatures',\n type: 'string[]',\n },\n {\n internalType: 'bytes[]',\n name: 'calldatas',\n type: 'bytes[]',\n },\n {\n internalType: 'bool[]',\n name: 'withDelegatecalls',\n type: 'bool[]',\n },\n {\n internalType: 'bytes32',\n name: 'ipfsHash',\n type: 'bytes32',\n },\n ],\n name: 'create',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n ],\n name: 'execute',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getGovernanceStrategy',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getGuardian',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n ],\n name: 'getProposalById',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'creator',\n type: 'address',\n },\n {\n internalType: 'contract IExecutorWithTimelock',\n name: 'executor',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'targets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'string[]',\n name: 'signatures',\n type: 'string[]',\n },\n {\n internalType: 'bytes[]',\n name: 'calldatas',\n type: 'bytes[]',\n },\n {\n internalType: 'bool[]',\n name: 'withDelegatecalls',\n type: 'bool[]',\n },\n {\n internalType: 'uint256',\n name: 'startBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'endBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'executionTime',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'forVotes',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'againstVotes',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'executed',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'canceled',\n type: 'bool',\n },\n {\n internalType: 'address',\n name: 'strategy',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'ipfsHash',\n type: 'bytes32',\n },\n ],\n internalType: 'struct IAaveGovernanceV2.ProposalWithoutVotes',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n ],\n name: 'getProposalState',\n outputs: [\n {\n internalType: 'enum IAaveGovernanceV2.ProposalState',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getProposalsCount',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'voter',\n type: 'address',\n },\n ],\n name: 'getVoteOnProposal',\n outputs: [\n {\n components: [\n {\n internalType: 'bool',\n name: 'support',\n type: 'bool',\n },\n {\n internalType: 'uint248',\n name: 'votingPower',\n type: 'uint248',\n },\n ],\n internalType: 'struct IAaveGovernanceV2.Vote',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getVotingDelay',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'executor',\n type: 'address',\n },\n ],\n name: 'isExecutorAuthorized',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n ],\n name: 'queue',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'governanceStrategy',\n type: 'address',\n },\n ],\n name: 'setGovernanceStrategy',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'votingDelay',\n type: 'uint256',\n },\n ],\n name: 'setVotingDelay',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'support',\n type: 'bool',\n },\n ],\n name: 'submitVote',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'proposalId',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'support',\n type: 'bool',\n },\n {\n internalType: 'uint8',\n name: 'v',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'r',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 's',\n type: 'bytes32',\n },\n ],\n name: 'submitVoteBySignature',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'executors',\n type: 'address[]',\n },\n ],\n name: 'unauthorizeExecutors',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IGovernanceStrategy } from './IGovernanceStrategy';\n\nexport class IGovernanceStrategy__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IGovernanceStrategy {\n return new Contract(address, _abi, signerOrProvider) as IGovernanceStrategy;\n }\n}\n\nconst _abi = [\n {\n inputs: [],\n name: 'AAVE',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STK_AAVE',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n ],\n name: 'getPropositionPowerAt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n ],\n name: 'getTotalPropositionSupplyAt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n ],\n name: 'getTotalVotingSupplyAt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n ],\n name: 'getVotingPowerAt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IGovernanceV2Helper } from './IGovernanceV2Helper';\n\nexport class IGovernanceV2Helper__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IGovernanceV2Helper {\n return new Contract(address, _abi, signerOrProvider) as IGovernanceV2Helper;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'contract IAaveGovernanceV2',\n name: 'governance',\n type: 'address',\n },\n ],\n name: 'getProposal',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'totalVotingSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minimumQuorum',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minimumDiff',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'executionTimeWithGracePeriod',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'proposalCreated',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'creator',\n type: 'address',\n },\n {\n internalType: 'contract IExecutorWithTimelock',\n name: 'executor',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'targets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'string[]',\n name: 'signatures',\n type: 'string[]',\n },\n {\n internalType: 'bytes[]',\n name: 'calldatas',\n type: 'bytes[]',\n },\n {\n internalType: 'bool[]',\n name: 'withDelegatecalls',\n type: 'bool[]',\n },\n {\n internalType: 'uint256',\n name: 'startBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'endBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'executionTime',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'forVotes',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'againstVotes',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'executed',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'canceled',\n type: 'bool',\n },\n {\n internalType: 'address',\n name: 'strategy',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'ipfsHash',\n type: 'bytes32',\n },\n {\n internalType: 'enum IAaveGovernanceV2.ProposalState',\n name: 'proposalState',\n type: 'uint8',\n },\n ],\n internalType: 'struct IGovernanceV2Helper.ProposalStats',\n name: 'proposalStats',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'skip',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'limit',\n type: 'uint256',\n },\n {\n internalType: 'contract IAaveGovernanceV2',\n name: 'governance',\n type: 'address',\n },\n ],\n name: 'getProposals',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'totalVotingSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minimumQuorum',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minimumDiff',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'executionTimeWithGracePeriod',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'proposalCreated',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'id',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'creator',\n type: 'address',\n },\n {\n internalType: 'contract IExecutorWithTimelock',\n name: 'executor',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'targets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'values',\n type: 'uint256[]',\n },\n {\n internalType: 'string[]',\n name: 'signatures',\n type: 'string[]',\n },\n {\n internalType: 'bytes[]',\n name: 'calldatas',\n type: 'bytes[]',\n },\n {\n internalType: 'bool[]',\n name: 'withDelegatecalls',\n type: 'bool[]',\n },\n {\n internalType: 'uint256',\n name: 'startBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'endBlock',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'executionTime',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'forVotes',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'againstVotes',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'executed',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'canceled',\n type: 'bool',\n },\n {\n internalType: 'address',\n name: 'strategy',\n type: 'address',\n },\n {\n internalType: 'bytes32',\n name: 'ipfsHash',\n type: 'bytes32',\n },\n {\n internalType: 'enum IAaveGovernanceV2.ProposalState',\n name: 'proposalState',\n type: 'uint8',\n },\n ],\n internalType: 'struct IGovernanceV2Helper.ProposalStats[]',\n name: 'proposalsStats',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'getTokensPower',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'votingPower',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'delegatedAddressVotingPower',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'propositionPower',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'delegatedAddressPropositionPower',\n type: 'address',\n },\n ],\n internalType: 'struct IGovernanceV2Helper.Power[]',\n name: 'power',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { BigNumber, BytesLike } from 'ethers';\nimport { tEthereumAddress } from '../commons/types';\n\nexport enum ExecutorType {\n Short,\n Long,\n}\n\nexport type GovCreateType = {\n user: tEthereumAddress;\n targets: tEthereumAddress[];\n values: string[];\n signatures: string[];\n calldatas: BytesLike[];\n withDelegateCalls: boolean[];\n ipfsHash: BytesLike;\n executor: ExecutorType;\n};\nexport type GovCancelType = {\n user: tEthereumAddress;\n proposalId: number;\n};\nexport type GovQueueType = {\n user: tEthereumAddress;\n proposalId: number;\n};\nexport type GovExecuteType = {\n user: tEthereumAddress;\n proposalId: number;\n};\nexport type GovSubmitVoteType = {\n user: tEthereumAddress;\n proposalId: number;\n support: boolean;\n};\nexport type GovSubmitVoteSignType = {\n user: tEthereumAddress;\n proposalId: number;\n support: boolean;\n signature: string;\n};\n\nexport type GovSignVotingType = {\n user: tEthereumAddress;\n support: boolean;\n proposalId: number;\n nonce: number;\n};\n\nexport type GovGetProposalsType = {\n skip: number;\n limit: number;\n};\n\nexport type GovGetProposalType = {\n proposalId: number;\n};\n\nexport type GovGetVotingSupplyType = {\n block: number;\n strategy: tEthereumAddress;\n};\n\nexport type GovGetVotingAtBlockType = {\n user: tEthereumAddress;\n strategy: tEthereumAddress;\n block: number;\n};\n\nexport type GovGetTokensVotingPower = {\n user: tEthereumAddress;\n tokens: tEthereumAddress[];\n};\n\nexport type GovGetVoteOnProposal = {\n proposalId: number;\n user: tEthereumAddress;\n};\n\nexport enum ProposalState {\n Pending = 'Pending',\n Canceled = 'Canceled',\n Active = 'Active',\n Failed = 'Failed',\n Succeeded = 'Succeeded',\n Queued = 'Queued',\n Expired = 'Expired',\n Executed = 'Executed',\n}\n\nexport type ProposalIpfs = {\n id: number;\n title: string;\n description: string;\n shortDescription: string;\n creator: tEthereumAddress;\n executor: tEthereumAddress;\n targets: tEthereumAddress[];\n values: string[];\n signatures: string[];\n calldatas: string[];\n withDelegatecalls: boolean[];\n startBlock: number;\n endBlock: number;\n executionTime: string;\n executionTimeWithGracePeriod: string;\n forVotes: string;\n againstVotes: string;\n executed: boolean;\n canceled: boolean;\n strategy: string;\n ipfsHash: string;\n state: ProposalState;\n minimumQuorum: string;\n minimumDiff: string;\n proposalCreated: number;\n totalVotingSupply: string;\n};\n\nexport type Proposal = {\n id: number;\n creator: tEthereumAddress;\n executor: tEthereumAddress;\n targets: tEthereumAddress[];\n values: BigNumber[];\n signatures: string[];\n calldatas: string[];\n withDelegatecalls: boolean[];\n startBlock: number;\n endBlock: number;\n executionTime: string;\n executionTimeWithGracePeriod: string;\n forVotes: string;\n againstVotes: string;\n executed: boolean;\n canceled: boolean;\n strategy: string;\n ipfsHash: string;\n state: ProposalState;\n minimumQuorum: string;\n minimumDiff: string;\n proposalCreated: number;\n totalVotingSupply: string;\n};\n\nexport type ProposalRPC = {\n totalVotingSupply: BigNumber;\n minimumQuorum: BigNumber;\n minimumDiff: BigNumber;\n executionTimeWithGracePeriod: BigNumber;\n proposalCreated: BigNumber;\n id: BigNumber;\n creator: string;\n executor: string;\n targets: string[];\n values: BigNumber[];\n signatures: string[];\n calldatas: string[];\n withDelegatecalls: boolean[];\n startBlock: BigNumber;\n endBlock: BigNumber;\n executionTime: BigNumber;\n forVotes: BigNumber;\n againstVotes: BigNumber;\n executed: boolean;\n canceled: boolean;\n strategy: string;\n ipfsHash: string;\n proposalState: number;\n};\n\nexport type Power = {\n votingPower: BigNumber;\n delegatedAddressVotingPower: string;\n propositionPower: BigNumber;\n delegatedAddressPropositionPower: string;\n 0: BigNumber;\n 1: string;\n 2: BigNumber;\n 3: string;\n};\n\nexport type Vote = {\n support: boolean;\n votingPower: BigNumber;\n 0: boolean;\n 1: BigNumber;\n};\n","import { splitSignature } from '@ethersproject/bytes';\nimport { providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n ENS,\n EthereumTransactionTypeExtended,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport { canBeEnsAddress } from '../commons/utils';\nimport { GovDelegationValidator } from '../commons/validators/methodValidators';\nimport {\n is0OrPositiveAmount,\n isEthAddress,\n isEthAddressOrENS,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport { IGovernancePowerDelegationToken } from './typechain/IGovernancePowerDelegationToken';\nimport { IGovernancePowerDelegationToken__factory } from './typechain/IGovernancePowerDelegationToken__factory';\n\nexport type GovDelegate = {\n user: tEthereumAddress;\n delegatee: tEthereumAddress | ENS;\n governanceToken: tEthereumAddress;\n};\n\nexport type GovDelegateByType = {\n user: tEthereumAddress;\n delegatee: tEthereumAddress | ENS;\n delegationType: string;\n governanceToken: tEthereumAddress;\n};\n\nexport type GovDelegateBySig = {\n user: tEthereumAddress;\n delegatee: tEthereumAddress | ENS;\n expiry: string;\n signature: string;\n governanceToken: tEthereumAddress;\n};\n\nexport type GovDelegateByTypeBySig = {\n user: tEthereumAddress;\n delegatee: tEthereumAddress | ENS;\n delegationType: string;\n expiry: string;\n signature: string;\n governanceToken: tEthereumAddress;\n};\n\nexport type GovPrepareDelegateSig = {\n delegatee: tEthereumAddress | ENS;\n nonce: string;\n expiry: string;\n governanceTokenName: string;\n governanceToken: tEthereumAddress;\n};\n\nexport type GovPrepareDelegateSigByType = {\n delegatee: tEthereumAddress | ENS;\n type: string;\n nonce: string;\n expiry: string;\n governanceTokenName: string;\n governanceToken: tEthereumAddress;\n};\n\n// Data types\nexport type GovGetDelegateeByType = {\n delegator: tEthereumAddress;\n delegationType: string;\n governanceToken: tEthereumAddress;\n};\nexport type GovGetPowerCurrent = {\n user: tEthereumAddress;\n delegationType: string;\n governanceToken: tEthereumAddress;\n};\nexport type GovGetPowerAtBlock = {\n user: tEthereumAddress;\n blockNumber: string;\n delegationType: string;\n governanceToken: tEthereumAddress;\n};\nexport type GovGetNonce = {\n user: tEthereumAddress;\n governanceToken: tEthereumAddress;\n};\n\nexport interface GovernancePowerDelegationToken {\n delegate: (args: GovDelegate) => Promise;\n delegateByType: (\n args: GovDelegateByType,\n ) => Promise;\n delegateBySig: (\n args: GovDelegateBySig,\n ) => Promise;\n delegateByTypeBySig: (\n args: GovDelegateByTypeBySig,\n ) => Promise;\n prepareDelegateSignature: (args: GovPrepareDelegateSig) => Promise;\n prepareDelegateByTypeSignature: (\n args: GovPrepareDelegateSigByType,\n ) => Promise;\n getDelegateeByType: (\n args: GovGetDelegateeByType,\n ) => Promise;\n getPowerCurrent: (args: GovGetPowerCurrent) => Promise;\n getPowerAtBlock: (args: GovGetPowerAtBlock) => Promise;\n getNonce: (args: GovGetNonce) => Promise;\n}\n\nexport class GovernancePowerDelegationTokenService\n extends BaseService\n implements GovernancePowerDelegationToken\n{\n constructor(provider: providers.Provider) {\n super(provider, IGovernancePowerDelegationToken__factory);\n }\n\n @GovDelegationValidator\n public async delegate(\n @isEthAddress('user')\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n { user, delegatee, governanceToken }: GovDelegate,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n governanceDelegationToken.populateTransaction.delegate(\n delegateeAddress,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.GOV_DELEGATION_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n @GovDelegationValidator\n public async delegateByType(\n @isEthAddress('user')\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n { user, delegatee, delegationType, governanceToken }: GovDelegateByType,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n governanceDelegationToken.populateTransaction.delegateByType(\n delegateeAddress,\n delegationType,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.GOV_DELEGATION_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n @GovDelegationValidator\n public async delegateBySig(\n @isEthAddress('user')\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n { user, delegatee, expiry, signature, governanceToken }: GovDelegateBySig,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n const nonce = await this.getNonce({ user, governanceToken });\n const { v, r, s } = splitSignature(signature);\n\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n governanceDelegationToken.populateTransaction.delegateBySig(\n delegateeAddress,\n nonce,\n expiry,\n v,\n r,\n s,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.GOV_DELEGATION_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n @GovDelegationValidator\n public async delegateByTypeBySig(\n @isEthAddress('user')\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n {\n user,\n delegatee,\n delegationType,\n expiry,\n signature,\n governanceToken,\n }: GovDelegateByTypeBySig,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n const nonce = await this.getNonce({ user, governanceToken });\n const { v, r, s } = splitSignature(signature);\n\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n governanceDelegationToken.populateTransaction.delegateByTypeBySig(\n delegateeAddress,\n delegationType,\n nonce,\n expiry,\n v,\n r,\n s,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.GOV_DELEGATION_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n @GovDelegationValidator\n public async prepareDelegateSignature(\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n @is0OrPositiveAmount('nonce')\n {\n delegatee,\n nonce,\n expiry,\n governanceTokenName,\n governanceToken,\n }: GovPrepareDelegateSig,\n ): Promise {\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n const { chainId } = await this.provider.getNetwork();\n\n const typeData = {\n types: {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n Delegate: [\n { name: 'delegatee', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'expiry', type: 'uint256' },\n ],\n },\n primaryType: 'Delegate' as const,\n domain: {\n name: governanceTokenName,\n chainId,\n verifyingContract: governanceToken,\n },\n message: {\n delegatee: delegateeAddress,\n nonce,\n expiry,\n },\n };\n\n return JSON.stringify(typeData);\n }\n\n @GovDelegationValidator\n public async prepareDelegateByTypeSignature(\n @isEthAddressOrENS('delegatee')\n @isEthAddress('governanceToken')\n @is0OrPositiveAmount('nonce')\n {\n delegatee,\n type,\n nonce,\n expiry,\n governanceTokenName,\n governanceToken,\n }: GovPrepareDelegateSigByType,\n ): Promise {\n const delegateeAddress: string = await this.getDelegateeAddress(delegatee);\n const { chainId } = await this.provider.getNetwork();\n\n const typeData = {\n types: {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n DelegateByType: [\n { name: 'delegatee', type: 'address' },\n { name: 'type', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'expiry', type: 'uint256' },\n ],\n },\n primaryType: 'DelegateByType' as const,\n domain: {\n name: governanceTokenName,\n chainId,\n verifyingContract: governanceToken,\n },\n message: {\n delegatee: delegateeAddress,\n type,\n nonce,\n expiry,\n },\n };\n\n return JSON.stringify(typeData);\n }\n\n @GovDelegationValidator\n public async getDelegateeByType(\n @isEthAddress('delegator')\n @isEthAddress('governanceToken')\n { delegator, delegationType, governanceToken }: GovGetDelegateeByType,\n ): Promise {\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n return governanceDelegationToken.getDelegateeByType(\n delegator,\n delegationType,\n );\n }\n\n @GovDelegationValidator\n public async getPowerCurrent(\n @isEthAddress('user')\n @isEthAddress('governanceToken')\n { user, delegationType, governanceToken }: GovGetPowerCurrent,\n ): Promise {\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n return (\n await governanceDelegationToken.getPowerCurrent(user, delegationType)\n ).toString();\n }\n\n @GovDelegationValidator\n public async getPowerAtBlock(\n @isEthAddress('user')\n @isEthAddress('governanceToken')\n @isPositiveAmount('blockNumber')\n { user, blockNumber, delegationType, governanceToken }: GovGetPowerAtBlock,\n ): Promise {\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n return (\n await governanceDelegationToken.getPowerAtBlock(\n user,\n blockNumber,\n delegationType,\n )\n ).toString();\n }\n\n @GovDelegationValidator\n public async getNonce(\n @isEthAddress('user')\n @isEthAddress('governanceToken')\n { user, governanceToken }: GovGetNonce,\n ): Promise {\n const governanceDelegationToken: IGovernancePowerDelegationToken =\n this.getContractInstance(governanceToken);\n\n return (await governanceDelegationToken._nonces(user)).toString();\n }\n\n private async getDelegateeAddress(delegatee: string): Promise {\n if (canBeEnsAddress(delegatee)) {\n const delegateeAddress = await this.provider.resolveName(delegatee);\n if (!delegateeAddress)\n throw new Error(`Address: ${delegatee} is not a valid ENS address`);\n\n return delegateeAddress;\n }\n\n return delegatee;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IGovernancePowerDelegationToken } from './IGovernancePowerDelegationToken';\n\nexport class IGovernancePowerDelegationToken__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IGovernancePowerDelegationToken {\n return new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as IGovernancePowerDelegationToken;\n }\n}\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'delegator',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'DelegateChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'DelegatedPowerChanged',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: '_nonces',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n ],\n name: 'delegate',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'expiry',\n type: 'uint256',\n },\n {\n internalType: 'uint8',\n name: 'v',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'r',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 's',\n type: 'bytes32',\n },\n ],\n name: 'delegateBySig',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'delegateByType',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegatee',\n type: 'address',\n },\n {\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'expiry',\n type: 'uint256',\n },\n {\n internalType: 'uint8',\n name: 'v',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'r',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 's',\n type: 'bytes32',\n },\n ],\n name: 'delegateByTypeBySig',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'delegator',\n type: 'address',\n },\n {\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'getDelegateeByType',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n {\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'getPowerAtBlock',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'enum IGovernancePowerDelegationToken.DelegationType',\n name: 'delegationType',\n type: 'uint8',\n },\n ],\n name: 'getPowerCurrent',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'blockNumber',\n type: 'uint256',\n },\n ],\n name: 'totalSupplyAt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { constants, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n transactionType,\n} from '../commons/types';\nimport { IncentivesValidator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isEthAddressArray,\n} from '../commons/validators/paramValidators';\nimport { ISiO2IncentivesController } from './typechain/ISiO2IncentivesController';\nimport { ISiO2IncentivesController__factory } from './typechain/ISiO2IncentivesController__factory';\n\nexport type ClaimRewardsMethodType = {\n user: string;\n assets: string[];\n to?: string;\n incentivesControllerAddress: string;\n};\n\nexport interface IncentivesControllerInterface {\n claimRewards: (\n args: ClaimRewardsMethodType,\n ) => EthereumTransactionTypeExtended[];\n}\n\nexport class IncentivesController\n extends BaseService\n implements IncentivesControllerInterface\n{\n constructor(provider: providers.Provider) {\n super(provider, ISiO2IncentivesController__factory);\n }\n\n @IncentivesValidator\n public claimRewards(\n @isEthAddress('user')\n @isEthAddress('incentivesControllerAddress')\n @isEthAddress('to')\n @isEthAddressArray('assets')\n { user, assets, to, incentivesControllerAddress }: ClaimRewardsMethodType,\n ): EthereumTransactionTypeExtended[] {\n const incentivesContract: ISiO2IncentivesController =\n this.getContractInstance(incentivesControllerAddress);\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n incentivesContract.populateTransaction.claimRewards(\n assets,\n constants.MaxUint256.toString(),\n to ?? user,\n ),\n from: user,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.REWARD_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { ISiO2IncentivesController } from './ISiO2IncentivesController';\n\nexport class ISiO2IncentivesController__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): ISiO2IncentivesController {\n return new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as ISiO2IncentivesController;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'assets',\n type: 'address[]',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'claimRewards',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","export * from './permissions-manager';\nexport {\n PERMISSION,\n PERMISSION_MAP,\n} from './permissions-manager/types/PermissionManagerTypes';\nexport * from './ui-incentive-data-provider';\nexport * from './ui-pool-data-provider';\nexport * from './wallet-balance-provider';\nexport * from './stake-ui-helper';\n\n// services\nexport * from './incentive-controller';\nexport * from './erc20-contract';\nexport * from './launchpad';\nexport * from './lendingPool-contract';\nexport * from './leverager';\nexport * from './faucet';\nexport * from './staking-contract';\nexport * from './governance-contract';\nexport * from './governance-contract/types';\nexport * from './governance-power-delegation-contract';\n\n// commons\nexport * from './commons/types';\nexport * from './commons/ipfs';\nexport * from './commons/utils';\n","import { BigNumber, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n ProtocolAction,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport {\n gasLimitRecommendations,\n getTxValue,\n valueToWei,\n DEFAULT_APPROVE_AMOUNT,\n} from '../commons/utils';\nimport { LaunchpadValidator } from '../commons/validators/methodValidators';\nimport {\n is0OrPositiveAmount,\n isEthAddress,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport { ERC20Service, IERC20ServiceInterface } from '../erc20-contract';\nimport { Launchpad as LaunchpadContract } from './typechain/Launchpad';\nimport { Launchpad__factory } from './typechain/Launchpad__factory';\nimport {\n Bid,\n BidParamsType,\n CancelParamsType,\n RefundParamsType,\n UpdateAmountParamsType,\n UpdateParamsType,\n UpdatePriceCapParamsType,\n} from './types';\n\nexport interface LaunchpadInterface {\n bid: (args: BidParamsType) => Promise;\n update: (\n args: UpdateParamsType,\n ) => Promise;\n updateAmount: (\n args: UpdateAmountParamsType,\n ) => Promise;\n updatePriceCap: (\n args: UpdatePriceCapParamsType,\n ) => Promise;\n cancel: (\n args: CancelParamsType,\n ) => Promise;\n refund: (\n args: RefundParamsType,\n ) => Promise;\n participant: (user: tEthereumAddress) => Promise;\n price: () => Promise;\n claimable: (user: tEthereumAddress) => Promise;\n refundable: (user: tEthereumAddress) => Promise;\n}\n\nexport class Launchpad\n extends BaseService\n implements LaunchpadInterface\n{\n readonly erc20Service: IERC20ServiceInterface;\n\n readonly launchpadAddress: string;\n\n constructor(provider: providers.Provider, launchpadAddress: string) {\n super(provider, Launchpad__factory);\n this.launchpadAddress = launchpadAddress;\n this.erc20Service = new ERC20Service(provider);\n }\n\n @LaunchpadValidator\n public async bid(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n @is0OrPositiveAmount('priceCap')\n { user, reserve, amount, priceCap, cancelable }: BidParamsType,\n ): Promise {\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = await decimalsOf(reserve);\n const convertedAmount: string = valueToWei(amount, reserveDecimals);\n const convertedPriceCap: string = valueToWei(priceCap, reserveDecimals);\n\n const approved = await isApproved({\n token: reserve,\n user,\n spender: this.launchpadAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.launchpadAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n LaunchpadContract.populateTransaction.bid(\n convertedAmount,\n convertedPriceCap,\n cancelable,\n ),\n action: ProtocolAction.bid,\n from: user,\n value: getTxValue(reserve, convertedAmount),\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.bid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async update(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n @is0OrPositiveAmount('priceCap')\n { user, reserve, amount, priceCap }: UpdateParamsType,\n ): Promise {\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = await decimalsOf(reserve);\n const convertedAmount: string = valueToWei(amount, reserveDecimals);\n const convertedPriceCap: string = valueToWei(priceCap, reserveDecimals);\n\n const approved = await isApproved({\n token: reserve,\n user,\n spender: this.launchpadAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.launchpadAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n LaunchpadContract.populateTransaction.update(\n convertedAmount,\n convertedPriceCap,\n ),\n action: ProtocolAction.updateBid,\n from: user,\n value: getTxValue(reserve, convertedAmount),\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.updateBid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async updateAmount(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n { user, reserve, amount }: UpdateAmountParamsType,\n ): Promise {\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = await decimalsOf(reserve);\n const convertedAmount: string = valueToWei(amount, reserveDecimals);\n\n const approved = await isApproved({\n token: reserve,\n user,\n spender: this.launchpadAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.launchpadAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n LaunchpadContract.populateTransaction.addBidding(convertedAmount),\n action: ProtocolAction.updateBid,\n from: user,\n value: getTxValue(reserve, convertedAmount),\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.updateBid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async updatePriceCap(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @is0OrPositiveAmount('priceCap')\n { user, reserve, priceCap }: UpdatePriceCapParamsType,\n ): Promise {\n const { decimalsOf }: IERC20ServiceInterface = this.erc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = await decimalsOf(reserve);\n const convertedPriceCap: string = valueToWei(priceCap, reserveDecimals);\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n LaunchpadContract.populateTransaction.updateCap(convertedPriceCap),\n action: ProtocolAction.updateBid,\n from: user,\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.updateBid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async cancel(\n @isEthAddress('user')\n { user }: CancelParamsType,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () => LaunchpadContract.populateTransaction.cancel(),\n action: ProtocolAction.cancelBid,\n from: user,\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.cancelBid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async refund(\n @isEthAddress('user')\n { user }: CancelParamsType,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n\n const LaunchpadContract = this.getContractInstance(this.launchpadAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () => LaunchpadContract.populateTransaction.refund(),\n action: ProtocolAction.refundBid,\n from: user,\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.refundBid].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n\n @LaunchpadValidator\n public async participant(\n @isEthAddress() user: tEthereumAddress,\n ): Promise {\n const bid = await this.getContractInstance(\n this.launchpadAddress,\n ).participant(user);\n if (bid.amount.paid.isZero()) return;\n return {\n paid: bid.amount.paid,\n multiplied: bid.amount.multiplied,\n priceCap: bid.cap.price,\n cancelable: bid.cancelable,\n };\n }\n\n @LaunchpadValidator\n public async price(): Promise {\n return this.getContractInstance(this.launchpadAddress).price();\n }\n\n @LaunchpadValidator\n public async claimable(\n @isEthAddress() user: tEthereumAddress,\n ): Promise {\n return this.getContractInstance(this.launchpadAddress).claimable(user);\n }\n\n @LaunchpadValidator\n public async refundable(\n @isEthAddress() user: tEthereumAddress,\n ): Promise {\n return this.getContractInstance(this.launchpadAddress).refundable(user);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\nimport type { Launchpad } from './Launchpad';\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'string',\n name: '_projectName',\n type: 'string',\n },\n {\n internalType: 'address',\n name: '_owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_usdc',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: '_tokenTotalAlloc',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_tokenDecimal',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_saleStartTs',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_saleEndTs',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [],\n name: 'MAX_INT',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'USDC_DECIMAL',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'newTotalPaid',\n type: 'uint256',\n },\n ],\n name: 'addBidding',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'paid',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'priceCap',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'cancelable',\n type: 'bool',\n },\n ],\n name: 'bid',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'bottomPrice',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'paid',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'hasCap',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'cancelable',\n type: 'bool',\n },\n ],\n name: 'calcMultiplied',\n outputs: [\n {\n internalType: 'uint256',\n name: 'multiplied',\n type: 'uint256',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [],\n name: 'cancel',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'claimable',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'paid',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'hasCap',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'cancelable',\n type: 'bool',\n },\n ],\n name: 'estimatedClaimable',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'findMinPriceCap',\n outputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'fixedRaised',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'participant',\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'uint128',\n name: 'paid',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'multiplied',\n type: 'uint128',\n },\n ],\n internalType: 'struct Project.Amount',\n name: 'amount',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'price',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n internalType: 'struct Project.Cap',\n name: 'cap',\n type: 'tuple',\n },\n {\n internalType: 'bool',\n name: 'cancelable',\n type: 'bool',\n },\n ],\n internalType: 'struct Project.Bid',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'price',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_totalMultiplied',\n type: 'uint256',\n },\n ],\n name: 'priceBy',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'projectName',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'refund',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'refundable',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'saleEndTs',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'saleStartTs',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tallied',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tallyUp',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'count',\n type: 'uint256',\n },\n ],\n name: 'tallyUpBetween',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tokenDecimal',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tokenTotalAlloc',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalMultiplied',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'newTotalPaid',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'priceCap',\n type: 'uint256',\n },\n ],\n name: 'update',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'priceCap',\n type: 'uint256',\n },\n ],\n name: 'updateCap',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'usdc',\n outputs: [\n {\n internalType: 'contract IERC20',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'withdrawable',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nexport class Launchpad__factory {\n static readonly abi = _abi;\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): Launchpad {\n return new Contract(address, _abi, signerOrProvider) as Launchpad;\n }\n}\n","import { constants, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n InterestRate,\n ProtocolAction,\n transactionType,\n LendingPoolMarketConfig,\n} from '../commons/types';\nimport {\n getTxValue,\n valueToWei,\n API_ETH_MOCK_ADDRESS,\n DEFAULT_APPROVE_AMOUNT,\n} from '../commons/utils';\nimport { LPValidator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n isPositiveOrMinusOneAmount,\n} from '../commons/validators/paramValidators';\nimport { ERC20Service, IERC20ServiceInterface } from '../erc20-contract';\n\nimport { SynthetixInterface, SynthetixService } from '../synthetix-contract';\nimport {\n WETHGatewayInterface,\n WETHGatewayService,\n} from '../wethgateway-contract';\nimport {\n LPBorrowParamsType,\n LPDepositParamsType,\n LPLiquidationCall,\n LPRepayParamsType,\n LPSetUsageAsCollateral,\n LPSwapBorrowRateMode,\n LPWithdrawParamsType,\n} from './lendingPoolTypes';\nimport { ILendingPool } from './typechain/ILendingPool';\nimport { ILendingPool__factory } from './typechain/ILendingPool__factory';\n\nexport interface LendingPoolInterface {\n deposit: (\n args: LPDepositParamsType,\n ) => Promise;\n withdraw: (\n args: LPWithdrawParamsType,\n ) => Promise;\n borrow: (\n args: LPBorrowParamsType,\n ) => Promise;\n repay: (\n args: LPRepayParamsType,\n ) => Promise;\n swapBorrowRateMode: (\n args: LPSwapBorrowRateMode,\n ) => EthereumTransactionTypeExtended[];\n setUsageAsCollateral: (\n args: LPSetUsageAsCollateral,\n ) => EthereumTransactionTypeExtended[];\n liquidationCall: (\n args: LPLiquidationCall,\n ) => Promise;\n}\n\nexport class LendingPool\n extends BaseService\n implements LendingPoolInterface\n{\n readonly erc20Service: IERC20ServiceInterface;\n\n readonly lendingPoolAddress: string;\n\n readonly synthetixService: SynthetixInterface;\n\n readonly wethGatewayService: WETHGatewayInterface;\n\n constructor(\n provider: providers.Provider,\n lendingPoolConfig?: LendingPoolMarketConfig,\n ) {\n super(provider, ILendingPool__factory);\n\n const { LENDING_POOL, WETH_GATEWAY } = lendingPoolConfig ?? {};\n\n this.lendingPoolAddress = LENDING_POOL ?? '';\n\n // initialize services\n this.erc20Service = new ERC20Service(provider);\n this.synthetixService = new SynthetixService(provider);\n this.wethGatewayService = new WETHGatewayService(\n provider,\n this.erc20Service,\n WETH_GATEWAY,\n );\n }\n\n @LPValidator\n public async deposit(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n @isEthAddress('onBehalfOf')\n { user, reserve, amount, onBehalfOf, referralCode }: LPDepositParamsType,\n ): Promise {\n if (reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) {\n return this.wethGatewayService.depositETH({\n lendingPool: this.lendingPoolAddress,\n user,\n amount,\n onBehalfOf,\n referralCode,\n });\n }\n\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = await decimalsOf(reserve);\n const convertedAmount: string = valueToWei(amount, reserveDecimals);\n\n const fundsAvailable: boolean =\n await this.synthetixService.synthetixValidation({\n user,\n reserve,\n amount: convertedAmount,\n });\n if (!fundsAvailable) {\n throw new Error('Not enough funds to execute operation');\n }\n\n const approved = await isApproved({\n token: reserve,\n user,\n spender: this.lendingPoolAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.lendingPoolAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n const lendingPoolContract: ILendingPool = this.getContractInstance(\n this.lendingPoolAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.deposit(\n reserve,\n convertedAmount,\n onBehalfOf ?? user,\n referralCode ?? '0',\n ),\n from: user,\n value: getTxValue(reserve, convertedAmount),\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n txs,\n txCallback,\n ProtocolAction.deposit,\n ),\n });\n\n return txs;\n }\n\n @LPValidator\n public async withdraw(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveOrMinusOneAmount('amount')\n @isEthAddress('onBehalfOf')\n @isEthAddress('sTokenAddress')\n { user, reserve, amount, onBehalfOf, sTokenAddress }: LPWithdrawParamsType,\n ): Promise {\n if (reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) {\n if (!sTokenAddress) {\n throw new Error(\n 'To withdraw ETH you need to pass the aWETH token address',\n );\n }\n\n return this.wethGatewayService.withdrawETH({\n lendingPool: this.lendingPoolAddress,\n user,\n amount,\n onBehalfOf,\n sTokenAddress,\n });\n }\n\n const { decimalsOf }: IERC20ServiceInterface = this.erc20Service;\n const decimals: number = await decimalsOf(reserve);\n\n const convertedAmount: string =\n amount === '-1'\n ? constants.MaxUint256.toString()\n : valueToWei(amount, decimals);\n\n const lendingPoolContract: ILendingPool = this.getContractInstance(\n this.lendingPoolAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.withdraw(\n reserve,\n convertedAmount,\n onBehalfOf ?? user,\n ),\n from: user,\n action: ProtocolAction.withdraw,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n [],\n txCallback,\n ProtocolAction.withdraw,\n ),\n },\n ];\n }\n\n @LPValidator\n public async borrow(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n @isEthAddress('debtTokenAddress')\n @isEthAddress('onBehalfOf')\n {\n user,\n reserve,\n amount,\n interestRateMode,\n debtTokenAddress,\n onBehalfOf,\n referralCode,\n }: LPBorrowParamsType,\n ): Promise {\n if (reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) {\n if (!debtTokenAddress) {\n throw new Error(\n `To borrow ETH you need to pass the stable or variable WETH debt Token Address corresponding the interestRateMode`,\n );\n }\n\n return this.wethGatewayService.borrowETH({\n lendingPool: this.lendingPoolAddress,\n user,\n amount,\n debtTokenAddress,\n interestRateMode,\n referralCode,\n });\n }\n\n const { decimalsOf }: IERC20ServiceInterface = this.erc20Service;\n const reserveDecimals = await decimalsOf(reserve);\n const formatAmount: string = valueToWei(amount, reserveDecimals);\n\n const numericRateMode = interestRateMode === InterestRate.Variable ? 2 : 1;\n\n const lendingPoolContract = this.getContractInstance(\n this.lendingPoolAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.borrow(\n reserve,\n formatAmount,\n numericRateMode,\n referralCode ?? 0,\n onBehalfOf ?? user,\n ),\n from: user,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n @LPValidator\n public async repay(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveOrMinusOneAmount('amount')\n @isEthAddress('onBehalfOf')\n { user, reserve, amount, interestRateMode, onBehalfOf }: LPRepayParamsType,\n ): Promise {\n if (reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase()) {\n return this.wethGatewayService.repayETH({\n lendingPool: this.lendingPoolAddress,\n user,\n amount,\n interestRateMode,\n onBehalfOf,\n });\n }\n\n const txs: EthereumTransactionTypeExtended[] = [];\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n\n const lendingPoolContract = this.getContractInstance(\n this.lendingPoolAddress,\n );\n const { populateTransaction }: ILendingPool = lendingPoolContract;\n const numericRateMode = interestRateMode === InterestRate.Variable ? 2 : 1;\n const decimals: number = await decimalsOf(reserve);\n\n const convertedAmount: string =\n amount === '-1'\n ? constants.MaxUint256.toString()\n : valueToWei(amount, decimals);\n\n if (amount !== '-1') {\n const fundsAvailable: boolean =\n await this.synthetixService.synthetixValidation({\n user,\n reserve,\n amount: convertedAmount,\n });\n if (!fundsAvailable) {\n throw new Error('Not enough funds to execute operation');\n }\n }\n\n const approved: boolean = await isApproved({\n token: reserve,\n user,\n spender: this.lendingPoolAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.lendingPoolAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n populateTransaction.repay(\n reserve,\n convertedAmount,\n numericRateMode,\n onBehalfOf ?? user,\n ),\n from: user,\n value: getTxValue(reserve, convertedAmount),\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n txs,\n txCallback,\n ProtocolAction.repay,\n ),\n });\n\n return txs;\n }\n\n @LPValidator\n public swapBorrowRateMode(\n @isEthAddress('user')\n @isEthAddress('reserve')\n { user, reserve, interestRateMode }: LPSwapBorrowRateMode,\n ): EthereumTransactionTypeExtended[] {\n const numericRateMode = interestRateMode === InterestRate.Variable ? 2 : 1;\n\n const lendingPoolContract = this.getContractInstance(\n this.lendingPoolAddress,\n );\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.swapBorrowRateMode(\n reserve,\n numericRateMode,\n ),\n from: user,\n });\n\n return [\n {\n txType: eEthereumTxType.DLP_ACTION,\n tx: txCallback,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n @LPValidator\n public setUsageAsCollateral(\n @isEthAddress('user')\n @isEthAddress('reserve')\n { user, reserve, usageAsCollateral }: LPSetUsageAsCollateral,\n ): EthereumTransactionTypeExtended[] {\n const lendingPoolContract = this.getContractInstance(\n this.lendingPoolAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.setUserUseReserveAsCollateral(\n reserve,\n usageAsCollateral,\n ),\n from: user,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n @LPValidator\n public async liquidationCall(\n @isEthAddress('liquidator')\n @isEthAddress('liquidatedUser')\n @isEthAddress('debtReserve')\n @isEthAddress('collateralReserve')\n @isPositiveAmount('purchaseAmount')\n {\n liquidator,\n liquidatedUser,\n debtReserve,\n collateralReserve,\n purchaseAmount,\n getSToken,\n liquidateAll,\n }: LPLiquidationCall,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n\n const approved = await isApproved({\n token: debtReserve,\n user: liquidator,\n spender: this.lendingPoolAddress,\n amount: purchaseAmount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user: liquidator,\n token: debtReserve,\n spender: this.lendingPoolAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n\n txs.push(approveTx);\n }\n\n let convertedAmount = constants.MaxUint256.toString();\n if (!liquidateAll) {\n const reserveDecimals = await decimalsOf(debtReserve);\n convertedAmount = valueToWei(purchaseAmount, reserveDecimals);\n }\n\n const lendingPoolContract = this.getContractInstance(\n this.lendingPoolAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n lendingPoolContract.populateTransaction.liquidationCall(\n collateralReserve,\n debtReserve,\n liquidatedUser,\n convertedAmount,\n getSToken ?? false,\n ),\n from: liquidator,\n value: getTxValue(debtReserve, convertedAmount),\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n txs,\n txCallback,\n ProtocolAction.liquidationCall,\n ),\n });\n\n return txs;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { ILendingPool } from './ILendingPool';\n\nexport class ILendingPool__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): ILendingPool {\n return new Contract(address, _abi, signerOrProvider) as ILendingPool;\n }\n}\n\nconst _abi = [\n {\n inputs: [],\n name: 'FLASHLOAN_PREMIUM_TOTAL',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'borrow',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'deposit',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiver',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'assets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'modes',\n type: 'uint256[]',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'params',\n type: 'bytes',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'flashLoan',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'collateral',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'purchaseAmount',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'receiveSToken',\n type: 'bool',\n },\n ],\n name: 'liquidationCall',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rateMode',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'repay',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'useAsCollateral',\n type: 'bool',\n },\n ],\n name: 'setUserUseReserveAsCollateral',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'rateMode',\n type: 'uint256',\n },\n ],\n name: 'swapBorrowRateMode',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'reserve',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","import { BigNumber as BigNumberJs } from 'bignumber.js';\nimport { providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n ProtocolAction,\n transactionType,\n InterestRate,\n} from '../commons/types';\nimport {\n gasLimitRecommendations,\n getTxValue,\n valueToWei,\n API_ETH_MOCK_ADDRESS,\n DEFAULT_APPROVE_AMOUNT,\n} from '../commons/utils';\nimport { LeveragerValidator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport {\n DebtERC20Service,\n IDebtERC20ServiceInterface,\n} from '../debtErc20-contract';\nimport { ERC20Service, IERC20ServiceInterface } from '../erc20-contract';\nimport { Leverager as LeveragerContract } from './typechain/Leverager';\nimport { Leverager__factory } from './typechain/Leverager__factory';\nimport { LoopParamsType } from './types';\nimport { calcTotalBorrowingAmount } from './utils';\n\nconst BORROW_RATIO_DECIMALS = 4;\n\nexport interface LeverageInterface {\n loop: (args: LoopParamsType) => Promise;\n}\n\nexport class Leverager\n extends BaseService\n implements LeverageInterface\n{\n readonly erc20Service: IERC20ServiceInterface;\n\n readonly debtErc20Service: IDebtERC20ServiceInterface;\n\n readonly leveragerAddress: string;\n\n constructor(provider: providers.Provider, leveragerAddress: string) {\n super(provider, Leverager__factory);\n this.leveragerAddress = leveragerAddress;\n // initialize services\n this.erc20Service = new ERC20Service(provider);\n this.debtErc20Service = new DebtERC20Service(provider);\n }\n\n @LeveragerValidator\n public async loop(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isEthAddress('debtToken')\n @isPositiveAmount('amount')\n @isPositiveAmount('borrowRatio')\n @isPositiveAmount('loopCount')\n {\n user,\n reserve,\n debtToken,\n amount,\n interestRateMode,\n borrowRatio,\n loopCount,\n }: LoopParamsType,\n ): Promise {\n const isETH = reserve.toLowerCase() === API_ETH_MOCK_ADDRESS.toLowerCase();\n\n const { isApproved, approve, decimalsOf }: IERC20ServiceInterface =\n this.erc20Service;\n const { isDelegated, approveDelegation }: IDebtERC20ServiceInterface =\n this.debtErc20Service;\n const txs: EthereumTransactionTypeExtended[] = [];\n const reserveDecimals: number = isETH ? 18 : await decimalsOf(reserve);\n const totalBorrowingAmount: string = calcTotalBorrowingAmount(\n new BigNumberJs(amount),\n new BigNumberJs(borrowRatio),\n new BigNumberJs(loopCount),\n ).toString();\n const convertedAmount: string = valueToWei(amount, reserveDecimals);\n\n const approved =\n isETH ||\n (await isApproved({\n token: reserve,\n user,\n spender: this.leveragerAddress,\n amount,\n }));\n const delegated = await isDelegated({\n token: debtToken,\n user,\n delegatee: this.leveragerAddress,\n amount: totalBorrowingAmount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: reserve,\n spender: this.leveragerAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n if (!delegated) {\n const delegateTx: EthereumTransactionTypeExtended = approveDelegation({\n user,\n token: debtToken,\n delegatee: this.leveragerAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(delegateTx);\n }\n\n const leveragerContract = this.getContractInstance(this.leveragerAddress);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n isETH\n ? leveragerContract.populateTransaction.loopASTR(\n interestRateMode === InterestRate.Variable ? 2 : 1,\n new BigNumberJs(borrowRatio)\n .shiftedBy(BORROW_RATIO_DECIMALS)\n .toFixed(),\n loopCount,\n )\n : leveragerContract.populateTransaction.loop(\n reserve,\n convertedAmount,\n interestRateMode === InterestRate.Variable ? 2 : 1,\n new BigNumberJs(borrowRatio)\n .shiftedBy(BORROW_RATIO_DECIMALS)\n .toFixed(),\n loopCount,\n ),\n action: ProtocolAction.loop,\n from: user,\n value: getTxValue(reserve, convertedAmount),\n skipEstimation: true,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: async () => ({\n gasLimit: gasLimitRecommendations[ProtocolAction.loop].recommended,\n gasPrice: (await this.provider.getGasPrice()).toString(),\n }),\n });\n\n return txs;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\nimport type { Leverager } from './Leverager';\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'pool',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_wastr',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'close',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'getAvailableBorrows',\n outputs: [\n {\n internalType: 'uint256',\n name: 'totalCollateral',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'availableBorrows',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'priceASTR',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'available',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: '_ltv',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'hf',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getConfiguration',\n outputs: [\n {\n internalType: 'uint256',\n name: 'data',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getSToken',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getVDToken',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'lendingPool',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'borrowRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'loopCount',\n type: 'uint256',\n },\n ],\n name: 'loop',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'borrowRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'loopCount',\n type: 'uint256',\n },\n ],\n name: 'loopASTR',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'ltv',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'stoken',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'loopCount',\n type: 'uint256',\n },\n ],\n name: 'reverseLoop',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'lwastr',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'loopCount',\n type: 'uint256',\n },\n ],\n name: 'reverseLoopASTR',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'wastr',\n outputs: [\n {\n internalType: 'contract IWASTR',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'withdrawable',\n outputs: [\n {\n internalType: 'uint256',\n name: 'totalCollateral',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'totalDebt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'currentLiquidationThreshold',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'hf',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'surplusedHF',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'limitCollateral',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'withdrawableCollateral',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nexport class Leverager__factory {\n static readonly abi = _abi;\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): Leverager {\n return new Contract(address, _abi, signerOrProvider) as Leverager;\n }\n}\n","import { BigNumber as BigNumberJs } from 'bignumber.js';\n\nexport const calcTotalBorrowingAmount = (\n depositAmount: BigNumberJs,\n borrowRatio: BigNumberJs,\n loopCount: BigNumberJs,\n) => {\n let totalBorrowingAmount = new BigNumberJs('0');\n let borrowingAmount = depositAmount;\n for (let i = 1; loopCount.gte(i); i++) {\n borrowingAmount = borrowingAmount.multipliedBy(borrowRatio);\n totalBorrowingAmount = totalBorrowingAmount.plus(borrowingAmount);\n }\n\n return totalBorrowingAmount.toFixed(0, BigNumberJs.ROUND_CEIL);\n};\n","import { BigNumber, providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { PermissionManager as PermissionManagerContract } from './typechain/PermissionManager';\nimport { PermissionManagerFactory } from './typechain/PermissionManagerFactory';\nimport {\n GetHumanizedUserPermissionsResponse,\n GetUserPermissionsResponse,\n PERMISSION,\n PERMISSION_MAP,\n} from './types/PermissionManagerTypes';\n\nexport interface PermissionManagerContext {\n permissionManagerAddress: string;\n provider: providers.Provider;\n}\n\nexport class PermissionManager {\n private readonly _contract: PermissionManagerContract;\n\n public constructor(context: PermissionManagerContext) {\n if (!isAddress(context.permissionManagerAddress)) {\n throw new Error('contract address is not valid');\n }\n\n this._contract = PermissionManagerFactory.connect(\n context.permissionManagerAddress,\n context.provider,\n );\n }\n\n public async getUserPermissions(\n user: string,\n ): Promise {\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n return this._contract.getUserPermissions(user);\n }\n\n public async getHumanizedUserPermissions(\n user: string,\n ): Promise {\n const { 0: permissions, 1: permissionsNumber } =\n await this.getUserPermissions(user);\n\n const parsedPermissions: PERMISSION[] = [];\n permissions.forEach((permission: BigNumber, index: number) => {\n if (index < permissionsNumber.toNumber()) {\n const permissionIndex = permission.toNumber();\n if (permissionIndex < 0 || permissionIndex > 4)\n throw new Error('Error parsing permission');\n parsedPermissions[index] =\n PERMISSION_MAP[permissionIndex as 0 | 1 | 2 | 3];\n }\n });\n return parsedPermissions;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Signer } from '@ethersproject/abstract-signer';\nimport { Provider } from '@ethersproject/providers';\nimport { Contract, ContractFactory } from '@ethersproject/contracts';\n\nimport { PermissionManager } from './PermissionManager';\n\nexport class PermissionManagerFactory extends ContractFactory {\n constructor(signer?: Signer) {\n super(_abi, _bytecode, signer);\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): PermissionManager {\n return (new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as unknown) as PermissionManager;\n }\n}\n\nconst _abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'set',\n type: 'bool',\n },\n ],\n name: 'PermissionsAdminSet',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'role',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'whiteLister',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'set',\n type: 'bool',\n },\n ],\n name: 'RoleSet',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'admins',\n type: 'address[]',\n },\n ],\n name: 'addPermissionAdmins',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256[]',\n name: 'roles',\n type: 'uint256[]',\n },\n {\n internalType: 'address[]',\n name: 'users',\n type: 'address[]',\n },\n ],\n name: 'addPermissions',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserPermissionAdmin',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserPermissions',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'roles',\n type: 'uint256[]',\n },\n ],\n name: 'isInAllRoles',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256[]',\n name: 'roles',\n type: 'uint256[]',\n },\n ],\n name: 'isInAnyRole',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'role',\n type: 'uint256',\n },\n ],\n name: 'isInRole',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'isPermissionsAdmin',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'isUserPermissionAdminValid',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'admins',\n type: 'address[]',\n },\n ],\n name: 'removePermissionAdmins',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256[]',\n name: 'roles',\n type: 'uint256[]',\n },\n {\n internalType: 'address[]',\n name: 'users',\n type: 'address[]',\n },\n ],\n name: 'removePermissions',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n\nconst _bytecode =\n '0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6111488061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100d55760003560e01c80638857a624116100875780638857a624146102fd5780638cadc3341461036b5780638da5cb5b14610429578063be5de6af14610431578063c9c8836014610457578063ca553a7a1461047d578063ea6c64fb146104eb578063f2fde38b146105a9576100d5565b80631cea0e8c146100da57806325fde6631461011c5780633e734f551461019d578063643148251461022f5780636d38f7841461025b578063715018a6146102d957806377133d81146102e3575b600080fd5b610100600480360360208110156100f057600080fd5b50356001600160a01b03166105cf565b604080516001600160a01b039092168252519081900360200190f35b6101426004803603602081101561013257600080fd5b50356001600160a01b03166105f1565b6040518080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015610188578181015183820152602001610170565b50505050905001935050505060405180910390f35b61021b600480360360408110156101b357600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156101dd57600080fd5b8201836020820111156101ef57600080fd5b803590602001918460208302840111600160201b8311171561021057600080fd5b509092509050610680565b604080519115158252519081900360200190f35b61021b6004803603604081101561024557600080fd5b506001600160a01b0381351690602001356106f4565b61021b6004803603604081101561027157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029b57600080fd5b8201836020820111156102ad57600080fd5b803590602001918460208302840111600160201b831117156102ce57600080fd5b50909250905061071b565b6102e161078d565b005b6102eb61082f565b60408051918252519081900360200190f35b6102e16004803603602081101561031357600080fd5b810190602081018135600160201b81111561032d57600080fd5b82018360208201111561033f57600080fd5b803590602001918460208302840111600160201b8311171561036057600080fd5b509092509050610835565b6102e16004803603604081101561038157600080fd5b810190602081018135600160201b81111561039b57600080fd5b8201836020820111156103ad57600080fd5b803590602001918460208302840111600160201b831117156103ce57600080fd5b919390929091602081019035600160201b8111156103eb57600080fd5b8201836020820111156103fd57600080fd5b803590602001918460208302840111600160201b8311171561041e57600080fd5b50909250905061094a565b610100610be0565b61021b6004803603602081101561044757600080fd5b50356001600160a01b0316610bef565b61021b6004803603602081101561046d57600080fd5b50356001600160a01b0316610c0c565b6102e16004803603602081101561049357600080fd5b810190602081018135600160201b8111156104ad57600080fd5b8201836020820111156104bf57600080fd5b803590602001918460208302840111600160201b831117156104e057600080fd5b509092509050610c3d565b6102e16004803603604081101561050157600080fd5b810190602081018135600160201b81111561051b57600080fd5b82018360208201111561052d57600080fd5b803590602001918460208302840111600160201b8311171561054e57600080fd5b919390929091602081019035600160201b81111561056b57600080fd5b82018360208201111561057d57600080fd5b803590602001918460208302840111600160201b8311171561059e57600080fd5b509092509050610d4d565b6102e1600480360360208110156105bf57600080fd5b50356001600160a01b0316610fd0565b6001600160a01b03908116600090815260016020819052604090912001541690565b604080516101008082526120208201909252606091600091839160208201612000803683375050506001600160a01b03851660009081526001602052604081205491925090815b61010081101561067457600182821c161561066c578084848151811061065a57fe5b60209081029190910101526001909201915b600101610638565b50919350915050915091565b6000805b828110156106e75783838281811061069857fe5b9050602002013560016000876001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116600014156106df5760009150506106ed565b600101610684565b50600190505b9392505050565b6001600160a01b038216600090815260016020819052604090912054821c16151592915050565b6000805b8281101561078257600084848381811061073557fe5b9050602002013560016000886001600160a01b03166001600160a01b0316815260200190815260200160002060000154901c600116111561077a5760019150506106ed565b60010161071f565b506000949350505050565b6107956110c8565b6000546001600160a01b039081169116146107e5576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61010081565b61083d6110c8565b6000546001600160a01b0390811691161461088d576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b81811015610945576001600260008585858181106108aa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055508282828181106108ea57fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600160405180821515815260200191505060405180910390a2600101610890565b505050565b336000818152600260205260409020546109ab576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b8382146109fc576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610a1557fe5b9050602002013590506000858584818110610a2c57fe5b905060200201356001600160a01b031690506101008210610a83576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610abe57506001600160a01b03811633145b80610ae557506001600160a01b038381166000908152600160208190526040909120015416155b610b30576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b6001600160a01b038316600090815260016020819052604090912090851b19831690819055610b84576001600160a01b03831660009081526001602081905260409091200180546001600160a01b03191690555b60408051600081529051339186916001600160a01b038716917fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94919081900360200190a45050600190920191506109ff9050565b505050505050565b6000546001600160a01b031690565b6001600160a01b0316600090815260026020526040902054151590565b6001600160a01b03908116600090815260016020818152604080842090920154909316825260029092522054151590565b610c456110c8565b6000546001600160a01b03908116911614610c95576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b60005b8181101561094557600060026000858585818110610cb257fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550828282818110610cf257fe5b905060200201356001600160a01b03166001600160a01b03167fce25e05cb98afcaf8f38f5668e4b0edc9248a8e1993151d180aa2f1823f4c79c600060405180821515815260200191505060405180910390a2600101610c98565b33600081815260026020526040902054610dae576040805162461bcd60e51b815260206004820152601c60248201527f43414c4c45525f4e4f545f5045524d495353494f4e535f41444d494e00000000604482015290519081900360640190fd5b838214610dff576040805162461bcd60e51b815260206004820152601a6024820152790929c869e9ca692a6a88a9ca8be82a4a482b2a6be988a9c8ea8960331b604482015290519081900360640190fd5b60005b82811015610bd8576000868683818110610e1857fe5b9050602002013590506000858584818110610e2f57fe5b905060200201356001600160a01b031690506101008210610e86576040805162461bcd60e51b815260206004820152600c60248201526b494e56414c49445f524f4c4560a01b604482015290519081900360640190fd5b6001600160a01b03808216600090815260016020819052604090912080549101549091168115801590610ec157506001600160a01b03811633145b80610ee857506001600160a01b038381166000908152600160208190526040909120015416155b610f33576040805162461bcd60e51b815260206004820152601760248201527624a72b20a624a22fa822a926a4a9a9a4a7a720a226a4a760491b604482015290519081900360640190fd5b81610f65576001600160a01b03831660009081526001602081905260409091200180546001600160a01b031916331790555b6001600160a01b03831660008181526001602081815260409283902082891b87179055825191825291513393889390927fcd20d6b081e97182a607d072021b5e830136ec08ba1b05aeb25859a6a6649c94929081900390910190a4505060019092019150610e029050565b610fd86110c8565b6000546001600160a01b03908116911614611028576040805162461bcd60e51b815260206004820181905260248201526000805160206110f3833981519152604482015290519081900360640190fd5b6001600160a01b03811661106d5760405162461bcd60e51b81526004018080602001828103825260268152602001806110cd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220aee55fd2ffe4c1ae4ebcf66d0cd51779458160aebfc82117874fa1cd3a9ae4b664736f6c634300060c0033';\n","import { BigNumber } from 'ethers';\n\nexport enum PERMISSION {\n DEPOSITOR = 'DEPOSITOR',\n BORROWER = 'BORROWER',\n LIQUIDATOR = 'LIQUIDATOR',\n STABLE_RATE_MANAGER = 'STABLE_RATE_MANAGER',\n}\n\nexport const PERMISSION_MAP = {\n 0: PERMISSION.DEPOSITOR,\n 1: PERMISSION.BORROWER,\n 2: PERMISSION.LIQUIDATOR,\n 3: PERMISSION.STABLE_RATE_MANAGER,\n};\n\nexport interface GetUserPermissionsResponse {\n 0: BigNumber[];\n 1: BigNumber;\n}\n\nexport type GetHumanizedUserPermissionsResponse = PERMISSION[];\n","import { providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { IPriceAggregatorAdapter } from './typechain/IPriceAggregatorAdapter';\nimport { IPriceAggregatorAdapterFactory } from './typechain/IPriceAggregatorAdapterFactory';\nimport { PriceFeed } from './types/PriceAggregatorTypes';\n\nexport * from './types/PriceAggregatorTypes';\n\nexport interface PriceFeedAggregatorAdapterInterface {\n currentPrice: (tokenAddress: string) => Promise;\n}\n\nexport interface PriceFeedAggregatorAdapterContext {\n contractAddress: string;\n provider: providers.Provider;\n}\n\nexport class PriceFeedAggregatorAdapter\n implements PriceFeedAggregatorAdapterInterface\n{\n private readonly adapterContract: IPriceAggregatorAdapter;\n\n public constructor({\n provider,\n contractAddress,\n }: PriceFeedAggregatorAdapterContext) {\n if (!isAddress(contractAddress)) {\n throw new Error('contract address is not valid');\n }\n\n this.adapterContract = IPriceAggregatorAdapterFactory.connect(\n contractAddress,\n provider,\n );\n }\n\n public currentPrice = async (tokenAddress: string): Promise => {\n if (!isAddress(tokenAddress)) {\n throw new Error('tokenAddress is not valid');\n }\n\n const price = await this.adapterContract.currentPrice(tokenAddress);\n return { price };\n };\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IPriceAggregatorAdapter } from './IPriceAggregatorAdapter';\n\nexport class IPriceAggregatorAdapterFactory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IPriceAggregatorAdapter {\n return new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as IPriceAggregatorAdapter;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'currentPrice',\n outputs: [\n {\n internalType: 'int256',\n name: '',\n type: 'int256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { StakeUiHelper as StakeUiHelperContract } from './typechain/StakeUiHelper';\nimport { StakeUiHelper__factory } from './typechain/StakeUiHelper__factory';\nimport { StakeData, StakeDataHumanized } from './types/stake';\n\nfunction formatRawStakeData(data: StakeData): StakeDataHumanized {\n return {\n intialSupply: data.intialSupply.toString(),\n inflactionStart: data.inflactionStart.toString(),\n decayRatio: data.decayRatio.toString(),\n stakeCooldownSeconds: data.stakeCooldownSeconds.toString(),\n stakeUnstakeWindow: data.stakeUnstakeWindow.toNumber(),\n stakeTokenTotalSupply: data.stakeTokenTotalSupply.toString(),\n stakeTokenPriceEth: data.stakeTokenPriceEth.toString(),\n rewardTokenPriceEth: data.rewardTokenPriceEth.toString(),\n stakeApy: data.stakeApy.toString(),\n stakeTokenUserBalance: data.stakeTokenUserBalance.toString(),\n underlyingTokenUserBalance: data.underlyingTokenUserBalance.toString(),\n userCooldown: data.userCooldown.toNumber(),\n userIncentivesToClaim: data.userIncentivesToClaim.toString(),\n userPermitNonce: data.userPermitNonce.toString(),\n };\n}\n\nexport interface StakeUiHelperContext {\n stakeUiHelperAddress: string;\n provider: providers.Provider;\n}\n\nexport interface StakeUiHelperInterface {\n getUserUIData: (user: string) => Promise;\n getUserUIDataHumanized: (user: string) => Promise;\n}\n\nexport class StakeUiHelper implements StakeUiHelperInterface {\n private readonly _contract: StakeUiHelperContract;\n\n /**\n * Constructor\n * @param context The ui pool data provider context\n */\n public constructor(context: StakeUiHelperContext) {\n if (!isAddress(context.stakeUiHelperAddress)) {\n throw new Error('contract address is not valid');\n }\n\n this._contract = StakeUiHelper__factory.connect(\n context.stakeUiHelperAddress,\n context.provider,\n );\n }\n\n public async getUserUIData(user: string) {\n const data = await this._contract.getUserUIData(user);\n return data[0];\n }\n\n public async getUserUIDataHumanized(user: string) {\n const data = await this.getUserUIData(user);\n return formatRawStakeData(data);\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { StakeUiHelper } from './StakeUiHelper';\n\nexport class StakeUiHelper__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): StakeUiHelper {\n return new Contract(address, _abi, signerOrProvider) as StakeUiHelper;\n }\n}\n\nconst _abi = [\n {\n inputs: [],\n name: 'getGeneralStakeUIData',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenTotalSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeCooldownSeconds',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeUnstakeWindow',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rewardTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeApy',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'inflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.GeneralStakeUIData',\n name: '',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getStkGeneralSiO2Data',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenTotalSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeCooldownSeconds',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeUnstakeWindow',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rewardTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeApy',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'inflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.GeneralStakeUIData',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getStkSiO2Data',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenTotalSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeCooldownSeconds',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeUnstakeWindow',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rewardTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeApy',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'underlyingTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userCooldown',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userIncentivesToClaim',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userPermitNonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'inflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.AssetUIData',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getStkUserSiO2Data',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'underlyingTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userCooldown',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userIncentivesToClaim',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userPermitNonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.UserStakeUIData',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserStakeUIData',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'underlyingTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userCooldown',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userIncentivesToClaim',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userPermitNonce',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.UserStakeUIData',\n name: '',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserUIData',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'stakeTokenTotalSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeCooldownSeconds',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeUnstakeWindow',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rewardTokenPriceEth',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeApy',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'underlyingTokenUserBalance',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userCooldown',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userIncentivesToClaim',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userPermitNonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'inflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakeUiHelper.AssetUIData',\n name: '',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { SignatureLike } from '@ethersproject/bytes';\nimport { constants, utils, Signature, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport {\n DEFAULT_APPROVE_AMOUNT,\n valueToWei,\n decimalsToCurrencyUnits,\n} from '../commons/utils';\nimport { SignStakingValidator } from '../commons/validators/methodValidators';\nimport {\n is0OrPositiveAmount,\n isEthAddress,\n isPositiveAmount,\n isPositiveOrMinusOneAmount,\n} from '../commons/validators/paramValidators';\nimport { ERC20Service, IERC20ServiceInterface } from '../erc20-contract';\nimport { ISiO2StakingHelper } from './typechain/ISiO2StakingHelper';\nimport { ISiO2StakingHelper__factory } from './typechain/ISiO2StakingHelper__factory';\nimport { StakedToken } from './typechain/StakedToken';\nimport { StakedToken__factory } from './typechain/StakedToken__factory';\nimport { StakeInfosByPage, StakeInfo } from './types';\n\nexport interface StakingInterface {\n stakingContractAddress: tEthereumAddress;\n\n stake: (\n user: tEthereumAddress,\n amount: string,\n mode: string,\n onBehalfOf?: tEthereumAddress,\n ) => Promise;\n redeem: (\n user: tEthereumAddress,\n index: string,\n amount: string,\n ) => Promise;\n cooldown: (\n user: tEthereumAddress,\n index: string,\n ) => EthereumTransactionTypeExtended[];\n claimRewards: (\n user: tEthereumAddress,\n amount: string,\n ) => Promise;\n signStaking: (\n user: tEthereumAddress,\n amount: string,\n nonce: string,\n ) => Promise;\n stakeWithPermit: (\n user: tEthereumAddress,\n amount: string,\n mode: string,\n signature: string,\n ) => Promise;\n\n getStakeInfoSize: (user: tEthereumAddress) => Promise;\n\n getStateInfosByPage: (\n user: tEthereumAddress,\n tPageSt: string,\n tPageSize: string,\n ) => Promise;\n}\n\ntype StakingServiceConfig = {\n TOKEN_STAKING_ADDRESS: string;\n STAKING_HELPER_ADDRESS?: string;\n};\n\nexport class StakingService\n extends BaseService\n implements StakingInterface\n{\n readonly stakingHelperContract: ISiO2StakingHelper;\n\n public readonly stakingContractAddress: tEthereumAddress;\n\n readonly stakingHelperContractAddress: tEthereumAddress;\n\n readonly erc20Service: IERC20ServiceInterface;\n\n constructor(\n provider: providers.Provider,\n stakingServiceConfig: StakingServiceConfig,\n ) {\n super(provider, StakedToken__factory);\n\n this.erc20Service = new ERC20Service(provider);\n\n this.stakingContractAddress = stakingServiceConfig.TOKEN_STAKING_ADDRESS;\n this.stakingHelperContractAddress =\n stakingServiceConfig.STAKING_HELPER_ADDRESS ?? '';\n\n if (this.stakingHelperContractAddress !== '') {\n this.stakingHelperContract = ISiO2StakingHelper__factory.connect(\n this.stakingHelperContractAddress,\n provider,\n );\n }\n }\n\n @SignStakingValidator\n public async signStaking(\n @isEthAddress() user: tEthereumAddress,\n @isPositiveAmount() amount: string,\n @is0OrPositiveAmount() nonce: string,\n ): Promise {\n const { getTokenData } = this.erc20Service;\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.STAKED_TOKEN();\n const { name, decimals } = await getTokenData(stakedToken);\n const convertedAmount: string = valueToWei(amount, decimals);\n const { chainId } = await this.provider.getNetwork();\n\n const typeData = {\n types: {\n EIP712Domain: [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n ],\n Permit: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n },\n primaryType: 'Permit',\n domain: {\n name,\n version: '1',\n chainId,\n verifyingContract: stakedToken,\n },\n message: {\n owner: user,\n spender: this.stakingHelperContractAddress,\n value: convertedAmount,\n nonce,\n deadline: constants.MaxUint256.toString(),\n },\n };\n\n return JSON.stringify(typeData);\n }\n\n public async stakeWithPermit(\n @isEthAddress() user: tEthereumAddress,\n @isPositiveAmount() amount: string,\n @is0OrPositiveAmount() mode: string,\n signature: SignatureLike,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const { decimalsOf } = this.erc20Service;\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.STAKED_TOKEN();\n const stakedTokenDecimals: number = await decimalsOf(stakedToken);\n const convertedAmount: string = valueToWei(amount, stakedTokenDecimals);\n // const convertStakeMode: number = Number.parseInt(mode);\n const sig: Signature = utils.splitSignature(signature);\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n this.stakingHelperContract.populateTransaction.stake(\n user,\n convertedAmount,\n mode,\n sig.v,\n sig.r,\n sig.s,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.STAKE_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n public async stake(\n @isEthAddress() user: tEthereumAddress,\n @isPositiveAmount() amount: string,\n @is0OrPositiveAmount() mode: string,\n @isEthAddress() onBehalfOf?: tEthereumAddress,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const { decimalsOf, isApproved, approve } = this.erc20Service;\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.STAKED_TOKEN();\n const stakedTokenDecimals: number = await decimalsOf(stakedToken);\n const convertedAmount: string = valueToWei(amount, stakedTokenDecimals);\n // const convertedStakeMode: number = Number.parseInt(mode);\n const approved: boolean = await isApproved({\n token: stakedToken,\n user,\n spender: this.stakingContractAddress,\n amount,\n });\n if (!approved) {\n const approveTx = approve({\n user,\n token: stakedToken,\n spender: this.stakingContractAddress,\n amount: DEFAULT_APPROVE_AMOUNT,\n });\n txs.push(approveTx);\n }\n\n console.log(stakingContract);\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n stakingContract.populateTransaction.stake(\n onBehalfOf ?? user,\n convertedAmount,\n mode,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.STAKE_ACTION,\n gas: this.generateTxPriceEstimation(txs, txCallback),\n });\n\n return txs;\n }\n\n public async redeem(\n @isEthAddress() user: tEthereumAddress,\n @is0OrPositiveAmount() index: string,\n @isPositiveOrMinusOneAmount() amount: string,\n ): Promise {\n let convertedAmount: string;\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n if (amount === '-1') {\n convertedAmount = constants.MaxUint256.toString();\n } else {\n const { decimalsOf } = this.erc20Service;\n\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.STAKED_TOKEN();\n const stakedTokenDecimals: number = await decimalsOf(stakedToken);\n convertedAmount = valueToWei(amount, stakedTokenDecimals);\n }\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n stakingContract.populateTransaction.redeem(\n user,\n index,\n convertedAmount,\n ),\n from: user,\n gasSurplus: 20,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.STAKE_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n public cooldown(\n @isEthAddress() user: tEthereumAddress,\n @isPositiveOrMinusOneAmount() index: string,\n ): EthereumTransactionTypeExtended[] {\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n stakingContract.populateTransaction.cooldown(index),\n from: user,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.STAKE_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n public async claimRewards(\n @isEthAddress() user: tEthereumAddress,\n @isPositiveOrMinusOneAmount() amount: string,\n ): Promise {\n let convertedAmount: string;\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n if (amount === '-1') {\n convertedAmount = constants.MaxUint256.toString();\n } else {\n const { decimalsOf } = this.erc20Service;\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.REWARD_TOKEN();\n const stakedTokenDecimals: number = await decimalsOf(stakedToken);\n convertedAmount = valueToWei(amount, stakedTokenDecimals);\n }\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n stakingContract.populateTransaction.claimRewards(user, convertedAmount),\n from: user,\n gasSurplus: 20,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.STAKE_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n public async getStakeInfoSize(\n @isEthAddress() user: tEthereumAddress,\n ): Promise {\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n return (await stakingContract.getStakeInfoSize(user)).toNumber();\n }\n\n public async getStateInfosByPage(\n @isEthAddress() user: tEthereumAddress,\n @is0OrPositiveAmount() tPageSt: string,\n @is0OrPositiveAmount() tPageSize: string,\n ): Promise {\n const stakingContract: StakedToken = this.getContractInstance(\n this.stakingContractAddress,\n );\n const { decimalsOf } = this.erc20Service;\n // eslint-disable-next-line new-cap\n const stakedToken: string = await stakingContract.REWARD_TOKEN();\n const decimal = await decimalsOf(stakedToken);\n const infos: StakeInfo[] = [];\n const pages = await stakingContract.getStakeInfosByPage(\n user,\n tPageSt,\n tPageSize,\n );\n pages.forEach(page => {\n infos.push({\n start: page.start.toString(),\n mode: page.mode.toString(),\n amount: decimalsToCurrencyUnits(page.amount.toString(), decimal),\n coolDown: page.coolDown.toString(),\n } as StakeInfo);\n });\n return {\n pageSt: tPageSt,\n pageInfo: infos,\n };\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { ISiO2StakingHelper } from './ISiO2StakingHelper';\n\nexport class ISiO2StakingHelper__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): ISiO2StakingHelper {\n return new Contract(address, _abi, signerOrProvider) as ISiO2StakingHelper;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stakeMode',\n type: 'uint256',\n },\n {\n internalType: 'uint8',\n name: 'v',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'r',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 's',\n type: 'bytes32',\n },\n ],\n name: 'stake',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport {\n Signer,\n BigNumberish,\n Contract,\n ContractFactory,\n Overrides,\n} from 'ethers';\nimport { Provider, TransactionRequest } from '@ethersproject/providers';\n\nimport type { StakedToken } from './StakedToken';\n\nexport class StakedToken__factory extends ContractFactory {\n constructor(signer?: Signer) {\n super(_abi, _bytecode, signer);\n }\n\n deploy(\n stakedToken: string,\n rewardToken: string,\n cooldownSeconds: BigNumberish,\n unstakeWindow: BigNumberish,\n rewardsVault: string,\n emissionManager: string,\n name: string,\n symbol: string,\n decimals: BigNumberish,\n overrides?: Overrides & { from?: string | Promise },\n ): Promise {\n return super.deploy(\n stakedToken,\n rewardToken,\n cooldownSeconds,\n unstakeWindow,\n rewardsVault,\n emissionManager,\n name,\n symbol,\n decimals,\n overrides || {},\n ) as Promise;\n }\n getDeployTransaction(\n stakedToken: string,\n rewardToken: string,\n cooldownSeconds: BigNumberish,\n unstakeWindow: BigNumberish,\n rewardsVault: string,\n emissionManager: string,\n name: string,\n symbol: string,\n decimals: BigNumberish,\n overrides?: Overrides & { from?: string | Promise },\n ): TransactionRequest {\n return super.getDeployTransaction(\n stakedToken,\n rewardToken,\n cooldownSeconds,\n unstakeWindow,\n rewardsVault,\n emissionManager,\n name,\n symbol,\n decimals,\n overrides || {},\n );\n }\n attach(address: string): StakedToken {\n return super.attach(address) as StakedToken;\n }\n connect(signer: Signer): StakedToken__factory {\n return super.connect(signer) as StakedToken__factory;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): StakedToken {\n return new Contract(address, _abi, signerOrProvider) as StakedToken;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'contract IERC20',\n name: 'stakedToken',\n type: 'address',\n },\n {\n internalType: 'contract IERC20',\n name: 'rewardToken',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'cooldownSeconds',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'unstakeWindow',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'rewardsVault',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'emissionManager',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'symbol',\n type: 'string',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n ],\n name: 'AssetConfigUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'AssetIndexUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'Cooldown',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'Redeem',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'RewardsAccrued',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'RewardsClaimed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'oldValue',\n type: 'uint128',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'newValue',\n type: 'uint128',\n },\n ],\n name: 'SnapshotDone',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'mode',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'Staked',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'UserIndexUpdated',\n type: 'event',\n },\n {\n inputs: [],\n name: 'COOLDOWN_SECONDS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'EMISSION_MANAGER',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'MIN_FROZEN_SECONDS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'PRECISION',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'REVISION',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'REWARDS_VAULT',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'REWARD_TOKEN',\n outputs: [\n {\n internalType: 'contract IERC20',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKED_TOKEN',\n outputs: [\n {\n internalType: 'contract IERC20',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_A',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_A_MUL',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_B',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_B_MUL',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_C',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'STAKE_MODE_C_MUL',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'UNSTAKE_WINDOW',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: '_countsSnapshots',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: '_governance',\n outputs: [\n {\n internalType: 'contract ITransferHook',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n name: '_snapshots',\n outputs: [\n {\n internalType: 'uint128',\n name: 'blockNumber',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'value',\n type: 'uint128',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'assets',\n outputs: [\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'inflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint128',\n name: 'lastUpdateTimestamp',\n type: 'uint128',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'claimRewards',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'intialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'totalStaked',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'decayRatio',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n ],\n internalType: 'struct DistributionTypes.AssetConfigInput[]',\n name: 'assetsConfigInput',\n type: 'tuple[]',\n },\n ],\n name: 'configureAssets',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'cooldown',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'subtractedValue',\n type: 'uint256',\n },\n ],\n name: 'decreaseAllowance',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'staker',\n type: 'address',\n },\n ],\n name: 'getAllStakeInfos',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'start',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'mode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'coolDown',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakedToken.StakeInfo[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'staker',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'getStakeInfo',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'start',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'mode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'coolDown',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakedToken.StakeInfo',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'staker',\n type: 'address',\n },\n ],\n name: 'getStakeInfoSize',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'staker',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'pageSt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'size',\n type: 'uint256',\n },\n ],\n name: 'getStakeInfosByPage',\n outputs: [\n {\n components: [\n {\n internalType: 'uint256',\n name: 'start',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'mode',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'coolDown',\n type: 'uint256',\n },\n ],\n internalType: 'struct StakedToken.StakeInfo[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'staker',\n type: 'address',\n },\n ],\n name: 'getTotalRewardsBalance',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getUserAssetData',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'spender',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'addedValue',\n type: 'uint256',\n },\n ],\n name: 'increaseAllowance',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ITransferHook',\n name: 'governance',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'symbol',\n type: 'string',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n ],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'name',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'redeem',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'redeemAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'mode',\n type: 'uint256',\n },\n ],\n name: 'stake',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'stakerRewardsToClaim',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n\nconst _bytecode =\n '0x610240604052600060095562278d00608052670d99a8cec7e2000060a0526301da9c006101205260016101405260026101608190526003610180526101a05260046101c05260086101e0523480156200005757600080fd5b5060405162003782380380620037828339810160408190526200007a9162000282565b838383838282828260039080519060200190620000999291906200010f565b508151620000af9060049060208501906200010f565b506005805460ff90921660ff199092169190911790555050506001600160601b0319606093841b811660c0529b831b8c1660e052505097881b891661010052505050603d939093556102009190915290911b90911661022052506200037a565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000147576000855562000192565b82601f106200016257805160ff191683800117855562000192565b8280016001018555821562000192579182015b828111156200019257825182559160200191906001019062000175565b50620001a0929150620001a4565b5090565b5b80821115620001a05760008155600101620001a5565b8051620001c88162000361565b919050565b600082601f830112620001de578081fd5b81516001600160401b0380821115620001f357fe5b6040516020601f8401601f19168201810183811183821017156200021357fe5b806040525081945083825286818588010111156200023057600080fd5b600092505b8383101562000254578583018101518284018201529182019162000235565b83831115620002665760008185840101525b5050505092915050565b805160ff81168114620001c857600080fd5b60008060008060008060008060006101208a8c031215620002a1578485fd5b8951620002ae8162000361565b60208b0151909950620002c18162000361565b60408b015160608c015191995097509550620002e060808b01620001bb565b9450620002f060a08b01620001bb565b60c08b01519094506001600160401b03808211156200030d578485fd5b6200031b8d838e01620001cd565b945060e08c015191508082111562000331578384fd5b50620003408c828d01620001cd565b925050620003526101008b0162000270565b90509295985092959850929598565b6001600160a01b03811681146200037757600080fd5b50565b60805160a05160c05160601c60e05160601c6101005160601c610120516101405161016051610180516101a0516101c0516101e051610200516102205160601c6133086200047a60003980610e685280610fb6525080610a155280610bb1525080610c6b5280611981525080611514528061195752508061061c52806118fe52508061069e5280610d71525080611688528061192c525080610673528061087652806118d352508061099d5280610c8f5280611489525080610eed5280610f8c5250806107905280610ad55280610b545250806112485280611275525050806127a352806127d1528061280c528061284c528061289f52506133086000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c80637e90d7ef11610151578063be399be5116100c3578063dd62ed3e11610087578063dd62ed3e146104f9578063dde43cba1461050c578063f11b818814610514578063f6d2ee8614610538578063fe2d28ce1461054b578063ff147f2e1461055357610274565b8063be399be5146104b0578063cbcbb507146104c3578063d5c3d94a146104cb578063da276040146104de578063dbdc08d8146104f157610274565b806399248ea71161011557806399248ea7146104545780639a99b4f01461045c578063a457c2d71461046f578063a78ae5ef14610482578063a9059cbb14610495578063aaf5eb68146104a857610274565b80637e90d7ef1461040b5780638779588c1461041e5780638dbefee214610431578063946776cd1461044457806395d89b411461044c57610274565b8063313ce567116101ea578063482c4e01116101ae578063482c4e01146103b857806360b6546d146103c0578063689ecfa2146103c857806370a08231146103e857806372b49d63146103fb5780637ae413e71461040357610274565b8063313ce567146103555780633373ee4c1461036a578063359c4a961461037d57806339509351146103855780633b521efe1461039857610274565b806318160ddd1161023c57806318160ddd146102e95780631c2f3e3d146102f157806323b872dd146103065780632acbf823146103195780632b83cccd1461033a578063312f6b831461034d57610274565b806306fdde0314610279578063095ea7b3146102975780630bf270ba146102b75780630c51b88f146102cc5780631084b76d146102e1575b600080fd5b610281610566565b60405161028e9190612e2b565b60405180910390f35b6102aa6102a5366004612c01565b6105fc565b60405161028e9190612e20565b6102bf61061a565b60405161028e9190613104565b6102df6102da366004612c2c565b61063e565b005b6102bf610874565b6102bf610898565b6102f961089e565b60405161028e9190612da5565b6102aa610314366004612bc1565b6108ad565b61032c610327366004612c01565b610935565b60405161028e9291906130ea565b6102df610348366004612c2c565b610966565b6102f9610b52565b61035d610b76565b60405161028e919061315d565b6102bf610378366004612b89565b610b7f565b6102bf610baf565b6102aa610393366004612c01565b610bd3565b6103ab6103a6366004612c01565b610c21565b60405161028e91906130dc565b6102bf610c69565b6102bf610c8d565b6103db6103d6366004612b6d565b610cb1565b60405161028e9190612dd2565b6102bf6103f6366004612b6d565b610d4e565b6102bf610d69565b6102bf610d6f565b6102bf610419366004612b6d565b610d93565b6102bf61042c366004612b6d565b610da5565b6102bf61043f366004612b6d565b610db7565b6102f9610e66565b610281610e8a565b6102f9610eeb565b6102df61046a366004612c01565b610f0f565b6102aa61047d366004612c01565b61102d565b6103db610490366004612c2c565b611095565b6102aa6104a3366004612c01565b6111e1565b61035d6111f5565b6102df6104be366004612b6d565b6111fa565b6102f9611246565b6102df6104d9366004612c60565b61126a565b6102df6104ec366004612d67565b61144a565b6102bf611512565b6102bf610507366004612b89565b611536565b6102bf611561565b610527610522366004612b6d565b611566565b60405161028e959493929190613131565b6102df610546366004612cd0565b61159e565b6102bf611686565b6102bf610561366004612b6d565b6116aa565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f25780601f106105c7576101008083540402835291602001916105f2565b820191906000526020600020905b8154815290600101906020018083116105d557829003601f168201915b5050505050905090565b60006106106106096116c5565b84846116c9565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b816106645760405162461bcd60e51b815260040161065b90612e7e565b60405180910390fd5b600061066f84610d4e565b90507f000000000000000000000000000000000000000000000000000000000000000082101580156106c157507f00000000000000000000000000000000000000000000000000000000000000008211155b6106dd5760405162461bcd60e51b815260040161065b90612ed4565b60006106f28530846106ed610898565b6117b5565b90508015610770577f2468f9268c60ad90e2d49edb0032c8a001e733ae888b3ab8e982edf535be1a76858260405161072b929190612db9565b60405180910390a16001600160a01b0385166000908152603e60205260409020546107569082611874565b6001600160a01b0386166000908152603e60205260409020555b6107838561077e85876118ce565b6119a5565b6107b86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087611a95565b6001600160a01b0385166000818152603f6020818152604080842081516080810183524281528084018a81528184018c815260608301888152845460018181018755868b52888b20955160049092029095019081559251938301939093555160028201559051600390910155938590529190529054905133917fad3fa07f4195b47e64892eb944ecbfc253384053c119852bb2bcae484c2fcb699161086591600019019088908a9061311b565b60405180910390a35050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6008546001600160a01b031681565b60006108ba848484611af5565b61092a846108c66116c5565b610925856040518060600160405280602881526020016131e9602891396001600160a01b038a166000908152600160205260408120906109046116c5565b6001600160a01b031681526020810191909152604001600020549190611b0d565b6116c9565b5060015b9392505050565b60066020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b806109835760405162461bcd60e51b815260040161065b90612e7e565b600061098f3384611ba4565b60018101549091506109c1907f0000000000000000000000000000000000000000000000000000000000000000611c15565b81540142116109e25760405162461bcd60e51b815260040161065b90612eab565b6003810154603d546109f5908290611874565b4211610a135760405162461bcd60e51b815260040161065b90612f00565b7f0000000000000000000000000000000000000000000000000000000000000000610a53610a4c603d548461187490919063ffffffff16565b4290611c6e565b1115610a715760405162461bcd60e51b815260040161065b90612fed565b600082600201548411610a845783610a8a565b82600201545b90506000610a9c8460010154836118ce565b9050610ab233610aab33610d4e565b6001611cb0565b50610abd3382611d55565b610ac8878784611e51565b610afc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168884611f60565b866001600160a01b0316336001600160a01b03167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8885604051610b4192919061310d565b60405180910390a350505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff1690565b6001600160a01b038082166000908152603c60209081526040808320938616835260059093019052205492915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610610610be06116c5565b846109258560016000610bf16116c5565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611874565b610c29612a33565b610c338383611ba4565b60408051608081018252825481526001830154602082015260028301549181019190915260039091015460608201529392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152603f60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610d43578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190610ce9565b505050509050919050565b6001600160a01b031660009081526020819052604090205490565b603d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b603e6020526000908152604090205481565b60076020526000908152604090205481565b60408051600180825281830190925260009160609190816020015b610dda612a5b565b815260200190600190039081610dd25790505090506040518060600160405280306001600160a01b03168152602001610e1285610d4e565b8152602001610e1f610898565b81525081600081518110610e2f57fe5b602002602001018190525061092e610e478483611fb2565b6001600160a01b0385166000908152603e602052604090205490611874565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105f25780601f106105c7576101008083540402835291602001916105f2565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f2533610f1e33610d4e565b6000611cb0565b905060006000198314610f385782610f3a565b815b9050610f77816040518060400160405280600e81526020016d1253959053125117d05353d5539560921b81525084611b0d9092919063ffffffff16565b336000908152603e6020526040902055610fdc7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000008684611a95565b836001600160a01b0316336001600160a01b03167f9310ccfcb8de723f578a9e4282ea9f521f05ae40dc08f3068dfad528a65ee3c78360405161101f9190613104565b60405180910390a350505050565b600061061061103a6116c5565b84610925856040518060600160405280602581526020016132ae60259139600160006110646116c5565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611b0d565b6001600160a01b0383166000908152603f602052604090208054606091906110cf5760405162461bcd60e51b815260040161065b90613024565b805484106110ef5760405162461bcd60e51b815260040161065b90612f2f565b805484900383116111005782611106565b80548490035b925060608367ffffffffffffffff8111801561112157600080fd5b5060405190808252806020026020018201604052801561115b57816020015b611148612a33565b8152602001906001900390816111405790505b50905060005b848110156111d757828187018154811061117757fe5b90600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250508282815181106111c457fe5b6020908102919091010152600101611161565b5095945050505050565b60006106106111ee6116c5565b8484611af5565b601281565b336000908152603f602052604090208054600019015b611238838284848154811061122157fe5b906000526020600020906004020160020154610966565b60001901611210565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112b25760405162461bcd60e51b815260040161065b90612fbe565b60005b81811015611241576000603c60008585858181106112cf57fe5b90506080020160600160208101906112e79190612b6d565b6001600160a01b03166001600160a01b03168152602001908152602001600020905061134c84848481811061131857fe5b90506080020160600160208101906113309190612b6d565b8286868681811061133d57fe5b905060800201602001356120b7565b5083838381811061135957fe5b6080029190910135825550670de0b6b3a764000084848481811061137957fe5b9050608002016040013511156113a15760405162461bcd60e51b815260040161065b9061304c565b8383838181106113ad57fe5b9050608002016040013581600201819055504281600101819055508383838181106113d457fe5b90506080020160600160208101906113ec9190612b6d565b6001600160a01b03167f87fa03892a0556cb6b8f97e6d533a150d4d55fcbf275fff5fa003fa636bcc7fa85858581811061142257fe5b905060800201600001356040516114399190613104565b60405180910390a2506001016112b5565b61145333610d4e565b61146f5760405162461bcd60e51b815260040161065b90613078565b600061147b3383611ba4565b60018101549091506114ad907f0000000000000000000000000000000000000000000000000000000000000000611c15565b81540142116114ce5760405162461bcd60e51b815260040161065b90612eab565b42600382015560405133907f8a05f911d8ab7fc50fec37ef4ba7f9bfcb1a3c191c81dcd824ad0946c4e20d6590611506908590613104565b60405180910390a25050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600181565b603c60205260009081526040902080546001820154600283015460038401546004909401549293919290916001600160801b03169085565b60006115a8612177565b905060095481116115ea5760405162461bcd60e51b815260040180806020018281038252602e815260200180613211602e913960400191505060405180910390fd5b6009819055604080516020601f880181900481028201810190925286815261162c91889088908190840183828082843760009201919091525061217c92505050565b61166b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061219392505050565b611674826121a6565b61167d876121bc565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03166000908152603f602052604090205490565b3390565b6001600160a01b03831661170e5760405162461bcd60e51b81526004018080602001828103825260248152602001806132606024913960400191505060405180910390fd5b6001600160a01b0382166117535760405162461bcd60e51b81526004018080602001828103825260228152602001806131a66022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038084166000908152603c6020908152604080832093881683526005840190915281205490919082806117f08885886120b7565b905080831461186857861561180d5761180a8782856121de565b91505b6001600160a01b03808a1660008181526005870160205260409081902084905551918a16917fbb123b5c06d5408bbea3c4fef481578175cfb432e3b482c6186f02ed9086585b9061185f908590613104565b60405180910390a35b50979650505050505050565b60008282018381101561092e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000827f0000000000000000000000000000000000000000000000000000000000000000141561192957611922827f0000000000000000000000000000000000000000000000000000000000000000611c15565b9050610614565b827f0000000000000000000000000000000000000000000000000000000000000000141561197b57611922827f0000000000000000000000000000000000000000000000000000000000000000611c15565b611922827f0000000000000000000000000000000000000000000000000000000000000000611c15565b6001600160a01b038216611a00576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611a0c6000838361220e565b600254611a199082611874565b6002556001600160a01b038216600090815260208190526040902054611a3f9082611874565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611aef908590612324565b50505050565b60405162461bcd60e51b815260040161065b90612f5b565b60008184841115611b9c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b61578181015183820152602001611b49565b50505050905090810190601f168015611b8e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0382166000908152603f60205260408120548210611bdb5760405162461bcd60e51b815260040161065b906130af565b6001600160a01b0383166000908152603f60205260409020805483908110611bff57fe5b9060005260206000209060040201905092915050565b600082611c2457506000610614565b82820282848281611c3157fe5b041461092e5760405162461bcd60e51b81526004018080602001828103825260218152602001806131c86021913960400191505060405180910390fd5b600061092e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b0d565b600080611cc18530866106ed610898565b6001600160a01b0386166000908152603e602052604081205491925090611ce89083611874565b90508115611d4c578315611d12576001600160a01b0386166000908152603e602052604090208190555b7f2468f9268c60ad90e2d49edb0032c8a001e733ae888b3ab8e982edf535be1a768683604051611d43929190612db9565b60405180910390a15b95945050505050565b6001600160a01b038216611d9a5760405162461bcd60e51b815260040180806020018281038252602181526020018061323f6021913960400191505060405180910390fd5b611da68260008361220e565b611de381604051806060016040528060228152602001613184602291396001600160a01b0385166000908152602081905260409020549190611b0d565b6001600160a01b038316600090815260208190526040902055600254611e099082611c6e565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b0383166000908152603f602052604081208054909190829085908110611e7a57fe5b90600052602060002090600402019050611ea1838260020154611c6e90919063ffffffff16565b60028201819055611f5957835b825460001901811015611f2157828160010181548110611eca57fe5b9060005260206000209060040201838281548110611ee457fe5b6000918252602090912082546004909202019081556001808301548183015560028084015490830155600392830154929091019190915501611eae565b5081805480611f2c57fe5b60008281526020812060046000199093019283020181815560018101829055600281018290556003015590555b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611241908490612324565b600080805b83518110156120af576000603c6000868481518110611fd257fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000209050600061204e82600401548360000154846001015485600201548660030160009054906101000a90046001600160801b03168b898151811061203d57fe5b6020026020010151604001516124dc565b90506120a361209c87858151811061206257fe5b602002602001015160200151838560050160008c6001600160a01b03166001600160a01b03168152602001908152602001600020546121de565b8590611874565b93505050600101611fb7565b509392505050565b60048201546003830154600091906001600160801b0316428114156120de5750905061092e565b60006120fa83876000015488600101548960020154868a6124dc565b905082811461214e57808660040181905550866001600160a01b03167f5777ca300dfe5bead41006fbce4389794dbc0ed8d6cccebfaf94630aa04184bc826040516121459190613104565b60405180910390a25b60039590950180546001600160801b031916426001600160801b03161790555092949350505050565b600190565b805161218f906003906020840190612a85565b5050565b805161218f906004906020840190612a85565b6005805460ff191660ff92909216919091179055565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000612206670de0b6b3a76400006122006121f98686611c6e565b8790611c15565b90612559565b949350505050565b816001600160a01b0316836001600160a01b0316141561222d57611241565b6001600160a01b0383161561225f57600061224784610d4e565b905061225d84826122588186611c6e565b61259b565b505b6001600160a01b0382161561228c57600061227983610d4e565b905061228a83826122588186611874565b505b6008546001600160a01b03168015611aef57806001600160a01b0316634a3931498585856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561230657600080fd5b505af115801561231a573d6000803e3d6000fd5b5050505050505050565b612336826001600160a01b0316612719565b612387576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106123c55780518252601f1990920191602091820191016123a6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612427576040519150601f19603f3d011682016040523d82523d6000602084013e61242c565b606091505b509150915081612483576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611aef5780806020019051602081101561249f57600080fd5b5051611aef5760405162461bcd60e51b815260040180806020018281038252602a815260200180613284602a913960400191505060405180910390fd5b60008115806124f257506001600160801b038316155b80612505575042836001600160801b0316145b8061250f57504285145b1561251b57508561254f565b60006125318686866001600160801b0316612752565b905061254b88612545856122008b86611c15565b90611874565b9150505b9695505050505050565b600061092e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506128ef565b6001600160a01b0383166000908152600760209081526040808320546006909252909120439190811580159061260057506001600160801b0383168160006125e4856001611c6e565b81526020810191909152604001600020546001600160801b0316145b156126445783816000612614856001611c6e565b8152602081019190915260400160002080546001600160801b03928316600160801b0292169190911790556126bf565b6040805180820182526001600160801b0380861682528681166020808401918252600087815290869052939093209151825493518216600160801b029082166001600160801b031990941693909317169190911790556126a5826001611874565b6001600160a01b0387166000908152600760205260409020555b604080516001600160a01b03881681526001600160801b03808816602083015286168183015290517f2cd3c83ddac2953ee75f53265d9ea4463eaf05030e5459a1b7e63819b7ce88f79181900360600190a1505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612206575050151592915050565b600080428511156127755760405162461bcd60e51b815260040161065b90612f87565b600061278b866127858689612954565b90611c6e565b905060006127994288611c6e565b905060006127c7837f0000000000000000000000000000000000000000000000000000000000000000612559565b905060006127f5837f0000000000000000000000000000000000000000000000000000000000000000612559565b9050805b8281106128cf57600061283586612830847f0000000000000000000000000000000000000000000000000000000000000000611c15565b612954565b905061288c6128856128478c8561296b565b61287f7f0000000000000000000000000000000000000000000000000000000000000000612200670de0b6b3a7640000838c89611c6e565b90611c15565b8890611874565b96508161289957506128cf565b6128c3827f0000000000000000000000000000000000000000000000000000000000000000611c15565b945050600019016127f9565b5050505050611d4c670de0b6b3a76400008261255990919063ffffffff16565b6000818361293e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611b61578181015183820152602001611b49565b50600083858161294a57fe5b0495945050505050565b600081831015612964578161092e565b5090919050565b6000631f54050082111561298157631f54050091505b816129955750670de0b6b3a7640000610614565b670de0b6b3a764000083835b6001811115612a0057600281066129d0576129bc8283612a06565b91506129c9816002612559565b90506129fb565b6129da8284612a06565b92506129e68283612a06565b91506129f86002612200836001611c6e565b90505b6129a1565b61254f82845b600080612a138484611c15565b9050612206670de0b6b3a7640000612200836706f05b59d3b20000611874565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282612abb5760008555612b01565b82601f10612ad457805160ff1916838001178555612b01565b82800160010185558215612b01579182015b82811115612b01578251825591602001919060010190612ae6565b50612b0d929150612b11565b5090565b5b80821115612b0d5760008155600101612b12565b60008083601f840112612b37578182fd5b50813567ffffffffffffffff811115612b4e578182fd5b602083019150836020828501011115612b6657600080fd5b9250929050565b600060208284031215612b7e578081fd5b813561092e8161316b565b60008060408385031215612b9b578081fd5b8235612ba68161316b565b91506020830135612bb68161316b565b809150509250929050565b600080600060608486031215612bd5578081fd5b8335612be08161316b565b92506020840135612bf08161316b565b929592945050506040919091013590565b60008060408385031215612c13578182fd5b8235612c1e8161316b565b946020939093013593505050565b600080600060608486031215612c40578283fd5b8335612c4b8161316b565b95602085013595506040909401359392505050565b60008060208385031215612c72578182fd5b823567ffffffffffffffff80821115612c89578384fd5b818501915085601f830112612c9c578384fd5b813581811115612caa578485fd5b866020608083028501011115612cbe578485fd5b60209290920196919550909350505050565b60008060008060008060808789031215612ce8578182fd5b8635612cf38161316b565b9550602087013567ffffffffffffffff80821115612d0f578384fd5b612d1b8a838b01612b26565b90975095506040890135915080821115612d33578384fd5b50612d4089828a01612b26565b909450925050606087013560ff81168114612d59578182fd5b809150509295509295509295565b600060208284031215612d78578081fd5b5035919050565b805182526020810151602083015260408101516040830152606081015160608301525050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612e1457612e01838551612d7f565b9284019260809290920191600101612dee565b50909695505050505050565b901515815260200190565b6000602080835283518082850152825b81811015612e5757858101830151858201604001528201612e3b565b81811115612e685783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601390820152721253959053125117d6915493d7d05353d55395606a1b604082015260600190565b6020808252600f908201526e57495448494e5f4455455f4441544560881b604082015260600190565b602080825260129082015271494e56414c49445f5354414b455f4d4f444560701b604082015260600190565b60208082526015908201527424a729aaa32324a1a4a2a72a2fa1a7a7a62227aba760591b604082015260600190565b6020808252601290820152711253959053125108141051d14814d510549560721b604082015260600190565b6020808252601290820152712a2920a729a322a92fa327a92124a22222a760711b604082015260600190565b60208082526018908201527f494e56414c49445f494e464c414354494f4e5f53544152540000000000000000604082015260600190565b60208082526015908201527427a7262cafa2a6a4a9a9a4a7a72fa6a0a720a3a2a960591b604082015260600190565b60208082526017908201527f554e5354414b455f57494e444f575f46494e4953484544000000000000000000604082015260600190565b6020808252600e908201526d24a72b20a624a21029aa20a5a2a960911b604082015260600190565b602080825260129082015271494e564c49445f44454341595f524154494f60701b604082015260600190565b6020808252601b908201527f494e56414c49445f42414c414e43455f4f4e5f434f4f4c444f574e0000000000604082015260600190565b6020808252601390820152720929cac82989288bea6a882968abe929c888ab606b1b604082015260600190565b608081016106148284612d7f565b6001600160801b0392831681529116602082015260400190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526001600160801b03166060830152608082015260a00190565b60ff91909116815260200190565b6001600160a01b038116811461318057600080fd5b5056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200f6135e5ca18c422536d7e4dd4bb4d12b89c519bc4b5de1ec2fb45a1c998c19d64736f6c63430007050033';\n","import { BigNumber, providers } from 'ethers';\nimport BaseService from '../commons/BaseService';\nimport { ChainId } from '../commons/types';\nimport { SynthetixValidator } from '../commons/validators/methodValidators';\nimport {\n isEthAddress,\n isPositiveAmount,\n} from '../commons/validators/paramValidators';\nimport { ISynthetix } from './typechain/ISynthetix';\nimport { ISynthetix__factory } from './typechain/ISynthetix__factory';\n\nexport const synthetixProxyByChainId: Record = {\n [ChainId.mainnet]: '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f',\n};\n\nexport type SynthetixValidationType = {\n user: string;\n reserve: string;\n amount: string; // wei\n};\n\nexport interface SynthetixInterface {\n synthetixValidation: (args: SynthetixValidationType) => Promise;\n}\n\nexport class SynthetixService\n extends BaseService\n implements SynthetixInterface\n{\n constructor(provider: providers.Provider) {\n super(provider, ISynthetix__factory);\n\n this.synthetixValidation = this.synthetixValidation.bind(this);\n }\n\n @SynthetixValidator\n public async synthetixValidation(\n @isEthAddress('user')\n @isEthAddress('reserve')\n @isPositiveAmount('amount')\n {\n user,\n reserve,\n amount, // wei\n }: SynthetixValidationType,\n ): Promise {\n const { chainId } = await this.provider.getNetwork();\n if (\n synthetixProxyByChainId[chainId] &&\n reserve.toLowerCase() === synthetixProxyByChainId[chainId].toLowerCase()\n ) {\n const synthContract = this.getContractInstance(\n synthetixProxyByChainId[chainId],\n );\n\n const transferableAmount: BigNumber =\n await synthContract.transferableSynthetix(user);\n return BigNumber.from(amount).lte(transferableAmount);\n }\n\n return true;\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { ISynthetix } from './ISynthetix';\n\nexport class ISynthetix__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): ISynthetix {\n return new Contract(address, _abi, signerOrProvider) as ISynthetix;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'transferableSynthetix',\n outputs: [\n {\n internalType: 'uint256',\n name: 'transferable',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { BigNumber } from 'bignumber.js';\nimport { providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { SIO2_PRICE } from '../commons/types';\nimport {\n PriceFeedAggregatorAdapter,\n PriceFeedAggregatorAdapterInterface,\n} from '../price-aggregator-adapter';\n\nimport { UiIncentiveDataProvider as UiIncentiveDataProviderContract } from './typechain/UiIncentiveDataProvider';\nimport { UiIncentiveDataProviderFactory } from './typechain/UiIncentiveDataProviderFactory';\nimport {\n FullReservesIncentiveDataResponse,\n IncentiveData,\n IncentiveDataHumanized,\n IncentiveUserData,\n IncentiveUserDataHumanized,\n ReserveIncentiveDataHumanizedResponse,\n ReserveIncentiveDataResponse,\n ReserveIncentiveWithFeedsResponse,\n UserReserveIncentiveDataHumanizedResponse,\n UserReserveIncentiveDataResponse,\n} from './types/UiIncentiveDataProviderTypes';\nexport * from './types/UiIncentiveDataProviderTypes';\n\nexport interface UiIncentiveDataProviderInterface {\n getFullReservesIncentiveData: (\n user: string,\n incentiveDataProviderAddress: string,\n lendingPoolAddressProvider: string,\n ) => Promise;\n getReservesIncentivesData: (\n lendingPoolAddressProvider: string,\n ) => Promise;\n getUserReservesIncentivesData: (\n user: string,\n lendingPoolAddressProvider: string,\n ) => Promise;\n getReservesIncentivesDataHumanized: (\n lendingPoolAddressProvider: string,\n ) => Promise;\n getUserReservesIncentivesDataHumanized: (\n user: string,\n lendingPoolAddressProvider: string,\n ) => Promise;\n getIncentivesDataWithPrice: (\n args: GetIncentivesDataWithPriceType,\n ) => Promise;\n}\nexport interface UiIncentiveDataProviderContext {\n incentiveDataProviderAddress: string;\n priceAggregatorAdapterAddress: string;\n provider: providers.Provider;\n}\n\nexport interface FeedResultSuccessful {\n rewardTokenAddress: string;\n price: BigNumber;\n}\n\nexport interface GetIncentivesDataWithPriceType {\n lendingPoolAddressProvider: string;\n tokenAddress?: string;\n}\n\nexport class UiIncentiveDataProvider\n implements UiIncentiveDataProviderInterface\n{\n public readonly _contract: UiIncentiveDataProviderContract;\n\n private readonly _chainlinkFeedsRegistries: PriceFeedAggregatorAdapterInterface;\n\n /**\n * Constructor\n * @param context The ui incentive data provider context\n */\n public constructor(context: UiIncentiveDataProviderContext) {\n if (!isAddress(context.incentiveDataProviderAddress)) {\n throw new Error('contract address is not valid');\n }\n\n if (!isAddress(context.priceAggregatorAdapterAddress)) {\n throw new Error('price aggregator address is not valid');\n }\n\n this._chainlinkFeedsRegistries = new PriceFeedAggregatorAdapter({\n provider: context.provider,\n contractAddress: context.priceAggregatorAdapterAddress,\n });\n\n this._contract = UiIncentiveDataProviderFactory.connect(\n context.incentiveDataProviderAddress,\n context.provider,\n );\n }\n\n /**\n * Get the full reserve incentive data for the lending pool and the user\n * @param user The user address\n */\n public async getFullReservesIncentiveData(\n user: string,\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address provider is not valid');\n }\n\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n return this._contract.getFullReservesIncentiveData(\n lendingPoolAddressProvider,\n user,\n );\n }\n\n /**\n * Get the reserve incentive data for the lending pool\n */\n public async getReservesIncentivesData(\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address provider is not valid');\n }\n\n return this._contract.getReservesIncentivesData(lendingPoolAddressProvider);\n }\n\n public async getReservesIncentivesDataHumanized(\n lendingPoolAddressProvider: string,\n ): Promise {\n const response = await this.getReservesIncentivesData(\n lendingPoolAddressProvider,\n );\n\n return response.map(r => ({\n underlyingAsset: r.underlyingAsset.toLowerCase(),\n sIncentiveData: this._formatIncentiveData(r.sIncentiveData),\n vdIncentiveData: this._formatIncentiveData(r.vdIncentiveData),\n sdIncentiveData: this._formatIncentiveData(r.sdIncentiveData),\n }));\n }\n\n public async getUserReservesIncentivesDataHumanized(\n user: string,\n lendingPoolAddressProvider: string,\n ): Promise {\n const response = await this.getUserReservesIncentivesData(\n user,\n lendingPoolAddressProvider,\n );\n\n return response.map(r => ({\n underlyingAsset: r.underlyingAsset.toLowerCase(),\n STokenIncentivesUserData: this._formatUserIncentiveData(\n r.STokenIncentivesUserData,\n ),\n vdTokenIncentivesUserData: this._formatUserIncentiveData(\n r.vdTokenIncentivesUserData,\n ),\n sdTokenIncentivesUserData: this._formatUserIncentiveData(\n r.sdTokenIncentivesUserData,\n ),\n }));\n }\n\n /**\n * Get the reserve incentive data for the user\n * @param user The user address\n */\n public async getUserReservesIncentivesData(\n user: string,\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address provider is not valid');\n }\n\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n return this._contract.getUserReservesIncentivesData(\n lendingPoolAddressProvider,\n user,\n );\n }\n\n public async getIncentivesDataWithPrice({\n lendingPoolAddressProvider,\n }: GetIncentivesDataWithPriceType): Promise<\n ReserveIncentiveWithFeedsResponse[]\n > {\n const incentives: ReserveIncentiveDataHumanizedResponse[] =\n await this.getReservesIncentivesDataHumanized(lendingPoolAddressProvider);\n const feeds: FeedResultSuccessful[] = [];\n const allIncentiveRewardTokens: Set = new Set();\n\n incentives.forEach(incentive => {\n allIncentiveRewardTokens.add(incentive.sIncentiveData.rewardTokenAddress);\n allIncentiveRewardTokens.add(\n incentive.vdIncentiveData.rewardTokenAddress,\n );\n allIncentiveRewardTokens.add(\n incentive.sdIncentiveData.rewardTokenAddress,\n );\n });\n\n const incentiveRewardTokens: string[] = Array.from(\n allIncentiveRewardTokens,\n );\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n const rewardFeedPromises = incentiveRewardTokens.map(rewardToken =>\n this._getFeed(rewardToken),\n );\n\n const feedResults = await Promise.allSettled(rewardFeedPromises);\n\n feedResults.forEach(feedResult => {\n if (feedResult.status === 'fulfilled')\n feeds.push({ ...feedResult.value });\n });\n\n return incentives.map(\n (incentive: ReserveIncentiveDataHumanizedResponse) => {\n const lFeed = feeds.find(\n feed =>\n feed.rewardTokenAddress ===\n incentive.sIncentiveData.rewardTokenAddress,\n );\n const vdFeed = feeds.find(\n feed =>\n feed.rewardTokenAddress ===\n incentive.vdIncentiveData.rewardTokenAddress,\n );\n const sdFeed = feeds.find(\n feed =>\n feed.rewardTokenAddress ===\n incentive.sdIncentiveData.rewardTokenAddress,\n );\n\n // TODO check sio2 address\n return {\n underlyingAsset: incentive.underlyingAsset,\n sIncentiveData: {\n ...incentive.sIncentiveData,\n priceFeed: lFeed ? lFeed.price.toFixed() : SIO2_PRICE,\n },\n vdIncentiveData: {\n ...incentive.vdIncentiveData,\n priceFeed: vdFeed ? vdFeed.price.toFixed() : SIO2_PRICE,\n },\n sdIncentiveData: {\n ...incentive.sdIncentiveData,\n priceFeed: sdFeed ? sdFeed.price.toFixed() : SIO2_PRICE,\n },\n };\n },\n );\n }\n\n private readonly _getFeed = async (\n rewardToken: string,\n ): Promise => {\n const feed = await this._chainlinkFeedsRegistries.currentPrice(rewardToken);\n\n return {\n price: new BigNumber(feed.price.toNumber()),\n rewardTokenAddress: rewardToken,\n };\n };\n\n private _formatIncentiveData(data: IncentiveData): IncentiveDataHumanized {\n return {\n incentiveIntialSupply: data.incentiveIntialSupply.toString(),\n incentiveInflactionStart: data.incentiveInflactionStart.toString(),\n incentiveDecayRatio: data.incentiveDecayRatio.toString(),\n incentivesLastUpdateTimestamp:\n data.incentivesLastUpdateTimestamp.toNumber(),\n tokenIncentivesIndex: data.tokenIncentivesIndex.toString(),\n tokenAddress: data.tokenAddress,\n rewardTokenAddress: data.rewardTokenAddress,\n incentiveControllerAddress: data.incentiveControllerAddress,\n rewardTokenDecimals: data.rewardTokenDecimals,\n precision: data.precision,\n };\n }\n\n private _formatUserIncentiveData(\n data: IncentiveUserData,\n ): IncentiveUserDataHumanized {\n return {\n tokenAddress: data.tokenAddress,\n rewardTokenAddress: data.rewardTokenAddress,\n incentiveControllerAddress: data.incentiveControllerAddress,\n rewardTokenDecimals: data.rewardTokenDecimals,\n tokenIncentivesUserIndex: data.tokenincentivesUserIndex.toString(),\n userUnclaimedRewards: data.userUnclaimedRewards.toString(),\n };\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { UiIncentiveDataProvider } from './UiIncentiveDataProvider';\n\nexport class UiIncentiveDataProviderFactory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): UiIncentiveDataProvider {\n return new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as UiIncentiveDataProvider;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getFullReservesIncentiveData',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'sIncentiveData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'vdIncentiveData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'sdIncentiveData',\n type: 'tuple',\n },\n ],\n internalType:\n 'struct UiIncentiveDataProvider.AggregatedReserveIncentiveData[]',\n name: '',\n type: 'tuple[]',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'STokenIncentivesUserData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'vdTokenIncentivesUserData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'sdTokenIncentivesUserData',\n type: 'tuple',\n },\n ],\n internalType:\n 'struct UiIncentiveDataProvider.UserReserveIncentiveData[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n ],\n name: 'getReservesIncentivesData',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'sIncentiveData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'vdIncentiveData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'incentiveIntialSupply',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveInflactionStart',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentiveDecayRatio',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'incentivesLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'tokenIncentivesIndex',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'precision',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.IncentiveData',\n name: 'sdIncentiveData',\n type: 'tuple',\n },\n ],\n internalType:\n 'struct UiIncentiveDataProvider.AggregatedReserveIncentiveData[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserReservesIncentivesData',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'STokenIncentivesUserData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'vdTokenIncentivesUserData',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'tokenincentivesUserIndex',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'userUnclaimedRewards',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rewardTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'incentiveControllerAddress',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'rewardTokenDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct UiIncentiveDataProvider.UserIncentiveData',\n name: 'sdTokenIncentivesUserData',\n type: 'tuple',\n },\n ],\n internalType:\n 'struct UiIncentiveDataProvider.UserReserveIncentiveData[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n","import { providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { UiPoolDataProvider as UiPoolDataProviderContract } from './typechain/UiPoolDataProvider';\nimport { UiPoolDataProviderFactory } from './typechain/UiPoolDataProviderFactory';\nimport {\n ReservesData,\n UserReserveData,\n PoolBaseCurrencyHumanized,\n ReserveDataHumanized,\n ReservesDataHumanized,\n UserReserveDataHumanized,\n} from './types/UiPoolDataProviderTypes';\n\nexport * from './types/UiPoolDataProviderTypes';\n\nconst ammSymbolMap: Record = {\n '0xae461ca67b15dc8dc81ce7615e0320da1a9ab8d5': 'UNIDAIUSDC',\n '0x004375dff511095cc5a197a54140a24efef3a416': 'UNIWBTCUSDC',\n '0xa478c2975ab1ea89e8196811f51a7b7ade33eb11': 'UNIDAIWETH',\n '0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc': 'UNIUSDCWETH',\n '0xdfc14d2af169b0d36c4eff567ada9b2e0cae044f': 'UNIAAVEWETH',\n '0xb6909b960dbbe7392d405429eb2b3649752b4838': 'UNIBATWETH',\n '0x3da1313ae46132a397d90d95b1424a9a7e3e0fce': 'UNICRVWETH',\n '0xa2107fa5b38d9bbd2c461d6edf11b11a50f6b974': 'UNILINKWETH',\n '0xc2adda861f89bbb333c90c492cb837741916a225': 'UNIMKRWETH',\n '0x8bd1661da98ebdd3bd080f0be4e6d9be8ce9858c': 'UNIRENWETH',\n '0x43ae24960e5534731fc831386c07755a2dc33d47': 'UNISNXWETH',\n '0xd3d2e2692501a5c9ca623199d38826e513033a17': 'UNIUNIWETH',\n '0xbb2b8038a1640196fbe3e38816f3e67cba72d940': 'UNIWBTCWETH',\n '0x2fdbadf3c4d5a8666bc06645b8358ab803996e28': 'UNIYFIWETH',\n '0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5': 'BPTWBTCWETH',\n '0x59a19d8c652fa0284f44113d0ff9aba70bd46fb4': 'BPTBALWETH',\n};\n\nexport interface UiPoolDataProviderContext {\n uiPoolDataProviderAddress: string;\n provider: providers.Provider;\n}\n\nexport interface UiPoolDataProviderInterface {\n getReservesList: (lendingPoolAddressProvider: string) => Promise;\n getReservesData: (\n lendingPoolAddressProvider: string,\n ) => Promise;\n getUserReservesData: (\n lendingPoolAddressProvider: string,\n user: string,\n ) => Promise;\n getReservesHumanized: (\n lendingPoolAddressProvider: string,\n ) => Promise;\n getUserReservesHumanized: (\n lendingPoolAddressProvider: string,\n user: string,\n ) => Promise;\n}\n\nexport class UiPoolDataProvider implements UiPoolDataProviderInterface {\n private readonly _contract: UiPoolDataProviderContract;\n\n /**\n * Constructor\n * @param context The ui pool data provider context\n */\n public constructor(context: UiPoolDataProviderContext) {\n if (!isAddress(context.uiPoolDataProviderAddress)) {\n throw new Error('contract address is not valid');\n }\n\n this._contract = UiPoolDataProviderFactory.connect(\n context.uiPoolDataProviderAddress,\n context.provider,\n );\n }\n\n /**\n * Get the underlying asset address for each lending pool reserve\n */\n public async getReservesList(\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address is not valid');\n }\n\n return this._contract.getReservesList(lendingPoolAddressProvider);\n }\n\n /**\n * Get data for each lending pool reserve\n */\n public async getReservesData(\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address is not valid');\n }\n\n return this._contract.getReservesData(lendingPoolAddressProvider);\n }\n\n /**\n * Get data for each user reserve on the lending pool\n */\n public async getUserReservesData(\n lendingPoolAddressProvider: string,\n user: string,\n ): Promise {\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error('Lending pool address is not valid');\n }\n\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n return this._contract.getUserReservesData(lendingPoolAddressProvider, user);\n }\n\n public async getReservesHumanized(\n lendingPoolAddressProvider: string,\n ): Promise {\n const { 0: reservesRaw, 1: poolBaseCurrencyRaw }: ReservesData =\n await this.getReservesData(lendingPoolAddressProvider);\n\n const reservesData: ReserveDataHumanized[] = reservesRaw.map(\n reserveRaw => ({\n id: (\n reserveRaw.underlyingAsset + lendingPoolAddressProvider\n ).toLowerCase(),\n underlyingAsset: reserveRaw.underlyingAsset.toLowerCase(),\n name: reserveRaw.name,\n symbol: ammSymbolMap[reserveRaw.underlyingAsset.toLowerCase()]\n ? ammSymbolMap[reserveRaw.underlyingAsset.toLowerCase()]\n : reserveRaw.symbol,\n decimals: reserveRaw.decimals.toNumber(),\n baseLTVasCollateral: reserveRaw.baseLTVasCollateral.toString(),\n reserveLiquidationThreshold:\n reserveRaw.reserveLiquidationThreshold.toString(),\n reserveLiquidationBonus: reserveRaw.reserveLiquidationBonus.toString(),\n reserveFactor: reserveRaw.reserveFactor.toString(),\n usageAsCollateralEnabled: reserveRaw.usageAsCollateralEnabled,\n borrowingEnabled: reserveRaw.borrowingEnabled,\n stableBorrowRateEnabled: reserveRaw.stableBorrowRateEnabled,\n isActive: reserveRaw.isActive,\n isFrozen: reserveRaw.isFrozen,\n liquidityIndex: reserveRaw.liquidityIndex.toString(),\n variableBorrowIndex: reserveRaw.variableBorrowIndex.toString(),\n liquidityRate: reserveRaw.liquidityRate.toString(),\n variableBorrowRate: reserveRaw.variableBorrowRate.toString(),\n stableBorrowRate: reserveRaw.stableBorrowRate.toString(),\n lastUpdateTimestamp: reserveRaw.lastUpdateTimestamp,\n sTokenAddress: reserveRaw.sTokenAddress.toString(),\n stableDebtTokenAddress: reserveRaw.stableDebtTokenAddress.toString(),\n variableDebtTokenAddress:\n reserveRaw.variableDebtTokenAddress.toString(),\n interestRateStrategyAddress:\n reserveRaw.interestRateStrategyAddress.toString(),\n availableLiquidity: reserveRaw.availableLiquidity.toString(),\n totalPrincipalStableDebt:\n reserveRaw.totalPrincipalStableDebt.toString(),\n averageStableRate: reserveRaw.averageStableRate.toString(),\n stableDebtLastUpdateTimestamp:\n reserveRaw.stableDebtLastUpdateTimestamp.toNumber(),\n totalScaledVariableDebt: reserveRaw.totalScaledVariableDebt.toString(),\n priceInMarketReferenceCurrency:\n reserveRaw.priceInMarketReferenceCurrency.toString(),\n variableRateSlope1: reserveRaw.variableRateSlope1.toString(),\n variableRateSlope2: reserveRaw.variableRateSlope2.toString(),\n stableRateSlope1: reserveRaw.stableRateSlope1.toString(),\n stableRateSlope2: reserveRaw.stableRateSlope2.toString(),\n }),\n );\n\n const baseCurrencyData: PoolBaseCurrencyHumanized = {\n // this is to get the decimals from the unit so 1e18 = string length of 19 - 1 to get the number of 0\n marketReferenceCurrencyDecimals:\n poolBaseCurrencyRaw.marketReferenceCurrencyUnit.toString().length - 1,\n marketReferenceCurrencyPriceInUsd:\n poolBaseCurrencyRaw.marketReferenceCurrencyPriceInUsd.toString(),\n networkBaseTokenPriceInUsd:\n poolBaseCurrencyRaw.networkBaseTokenPriceInUsd.toString(),\n networkBaseTokenPriceDecimals:\n poolBaseCurrencyRaw.networkBaseTokenPriceDecimals,\n };\n\n return {\n reservesData,\n baseCurrencyData,\n };\n }\n\n public async getUserReservesHumanized(\n lendingPoolAddressProvider: string,\n user: string,\n ): Promise {\n const userReservesRaw: UserReserveData[] = await this.getUserReservesData(\n lendingPoolAddressProvider,\n user,\n );\n\n return userReservesRaw.map((userReserveRaw: UserReserveData) => ({\n underlyingAsset: userReserveRaw.underlyingAsset.toLowerCase(),\n scaledSTokenBalance: userReserveRaw.scaledSTokenBalance.toString(),\n usageAsCollateralEnabledOnUser:\n userReserveRaw.usageAsCollateralEnabledOnUser,\n stableBorrowRate: userReserveRaw.stableBorrowRate.toString(),\n scaledVariableDebt: userReserveRaw.scaledVariableDebt.toString(),\n principalStableDebt: userReserveRaw.principalStableDebt.toString(),\n stableBorrowLastUpdateTimestamp:\n userReserveRaw.stableBorrowLastUpdateTimestamp.toNumber(),\n }));\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Signer } from 'ethers';\nimport { Provider, TransactionRequest } from '@ethersproject/providers';\nimport { Contract, ContractFactory, Overrides } from '@ethersproject/contracts';\n\nimport type { UiPoolDataProvider } from './UiPoolDataProvider';\n\nexport class UiPoolDataProviderFactory extends ContractFactory {\n constructor(signer?: Signer) {\n super(_abi, _bytecode, signer);\n }\n\n deploy(\n _networkBaseTokenPriceInUsdProxyAggregatorAdapter: string,\n _baseTokenAddress: string,\n overrides?: Overrides,\n ): Promise {\n return super.deploy(\n _networkBaseTokenPriceInUsdProxyAggregatorAdapter,\n _baseTokenAddress,\n overrides || {},\n ) as Promise;\n }\n getDeployTransaction(\n _networkBaseTokenPriceInUsdProxyAggregatorAdapter: string,\n _baseTokenAddress: string,\n overrides?: Overrides,\n ): TransactionRequest {\n return super.getDeployTransaction(\n _networkBaseTokenPriceInUsdProxyAggregatorAdapter,\n _baseTokenAddress,\n overrides || {},\n );\n }\n attach(address: string): UiPoolDataProvider {\n return super.attach(address) as UiPoolDataProvider;\n }\n connect(signer: Signer): UiPoolDataProviderFactory {\n return super.connect(signer) as UiPoolDataProviderFactory;\n }\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): UiPoolDataProvider {\n return new Contract(address, _abi, signerOrProvider) as UiPoolDataProvider;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'contract IPriceAggregatorAdapter',\n name: '_networkBaseTokenPriceInUsdProxyAggregatorAdapter',\n type: 'address',\n },\n {\n internalType: 'address',\n name: '_baseTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [],\n name: 'ETH_CURRENCY_UNIT',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'baseTokenAddress',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: '_bytes32',\n type: 'bytes32',\n },\n ],\n name: 'bytes32ToString',\n outputs: [\n {\n internalType: 'string',\n name: '',\n type: 'string',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n ],\n name: 'getReservesData',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n internalType: 'string',\n name: 'name',\n type: 'string',\n },\n {\n internalType: 'string',\n name: 'symbol',\n type: 'string',\n },\n {\n internalType: 'uint256',\n name: 'decimals',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'baseLTVasCollateral',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'reserveLiquidationThreshold',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'reserveLiquidationBonus',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'reserveFactor',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'usageAsCollateralEnabled',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'borrowingEnabled',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'stableBorrowRateEnabled',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'isActive',\n type: 'bool',\n },\n {\n internalType: 'bool',\n name: 'isFrozen',\n type: 'bool',\n },\n {\n internalType: 'uint128',\n name: 'liquidityIndex',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'variableBorrowIndex',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'liquidityRate',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'variableBorrowRate',\n type: 'uint128',\n },\n {\n internalType: 'uint128',\n name: 'stableBorrowRate',\n type: 'uint128',\n },\n {\n internalType: 'uint40',\n name: 'lastUpdateTimestamp',\n type: 'uint40',\n },\n {\n internalType: 'address',\n name: 'sTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'stableDebtTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'variableDebtTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'interestRateStrategyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'availableLiquidity',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'totalPrincipalStableDebt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'averageStableRate',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stableDebtLastUpdateTimestamp',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'totalScaledVariableDebt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'priceInMarketReferenceCurrency',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'variableRateSlope1',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'variableRateSlope2',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stableRateSlope1',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stableRateSlope2',\n type: 'uint256',\n },\n ],\n internalType: 'struct IUiPoolDataProviderV2.AggregatedReserveData[]',\n name: '',\n type: 'tuple[]',\n },\n {\n components: [\n {\n internalType: 'uint256',\n name: 'marketReferenceCurrencyUnit',\n type: 'uint256',\n },\n {\n internalType: 'int256',\n name: 'marketReferenceCurrencyPriceInUsd',\n type: 'int256',\n },\n {\n internalType: 'int256',\n name: 'networkBaseTokenPriceInUsd',\n type: 'int256',\n },\n {\n internalType: 'uint8',\n name: 'networkBaseTokenPriceDecimals',\n type: 'uint8',\n },\n ],\n internalType: 'struct IUiPoolDataProviderV2.BaseCurrencyInfo',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n ],\n name: 'getReservesList',\n outputs: [\n {\n internalType: 'address[]',\n name: '',\n type: 'address[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract ILendingPoolAddressesProvider',\n name: 'provider',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserReservesData',\n outputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'underlyingAsset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'scaledSTokenBalance',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'usageAsCollateralEnabledOnUser',\n type: 'bool',\n },\n {\n internalType: 'uint256',\n name: 'stableBorrowRate',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'scaledVariableDebt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'principalStableDebt',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'stableBorrowLastUpdateTimestamp',\n type: 'uint256',\n },\n ],\n internalType: 'struct IUiPoolDataProviderV2.UserReserveData[]',\n name: '',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'networkBaseTokenPriceInUsdProxyAggregatorAdapter',\n outputs: [\n {\n internalType: 'contract IPriceAggregatorAdapter',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nconst _bytecode =\n '0x60c06040523480156200001157600080fd5b5060405162001fc738038062001fc7833981016040819052620000349162000053565b6001600160601b0319606092831b8116608052911b1660a052620000aa565b6000806040838503121562000066578182fd5b8251620000738162000091565b6020840151909250620000868162000091565b809150509250929050565b6001600160a01b0381168114620000a757600080fd5b50565b60805160601c60a05160601c611ee9620000de6000398061087d528061107b5250806109a7528061104e5250611ee96000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80637cb374bd1161005b5780637cb374bd146100e05780639201de55146100f5578063cd66697a14610115578063ec489c211461011d5761007d565b80630496f53a1461008257806351974cc0146100a0578063586c1442146100c0575b600080fd5b61008a61013e565b6040516100979190611e28565b60405180910390f35b6100b36100ae3660046117c3565b61014a565b6040516100979190611d88565b6100d36100ce3660046117a7565b610788565b6040516100979190611caa565b6100e861087b565b6040516100979190611c96565b61010861010336600461178f565b61089f565b6040516100979190611e15565b6100e86109a5565b61013061012b3660046117a7565b6109c9565b604051610097929190611cf7565b670de0b6b3a764000081565b60606000836001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561018757600080fd5b505afa15801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf91906116c8565b90506060816001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156101fc57600080fd5b505afa158015610210573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261023891908101906116e4565b905061024261140b565b604051634417a58360e01b81526001600160a01b03841690634417a5839061026e908890600401611c96565b60206040518083038186803b15801561028657600080fd5b505afa15801561029a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102be919061199a565b905060606001600160a01b0386166102d75760006102da565b82515b67ffffffffffffffff811180156102f057600080fd5b5060405190808252806020026020018201604052801561032a57816020015b61031761141e565b81526020019060019003908161030f5790505b50905060005b835181101561077b57610341611466565b856001600160a01b03166335ea6a7586848151811061035c57fe5b60200260200101516040518263ffffffff1660e01b81526004016103809190611c96565b6101806040518083038186803b15801561039957600080fd5b505afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d1919061189f565b90508482815181106103df57fe5b60200260200101518383815181106103f357fe5b60209081029190910101516001600160a01b03918216905260e0820151604051630ed1279f60e11b8152911690631da24f3e90610434908b90600401611c96565b60206040518083038186803b15801561044c57600080fd5b505afa158015610460573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048491906117fb565b83838151811061049057fe5b60209081029190910181015101526104a88483611119565b8383815181106104b457fe5b60209081029190910101519015156040909101526104d2848361117a565b15610772578061012001516001600160a01b0316631da24f3e896040518263ffffffff1660e01b81526004016105089190611c96565b60206040518083038186803b15801561052057600080fd5b505afa158015610534573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055891906117fb565b83838151811061056457fe5b602002602001015160800181815250508061010001516001600160a01b031663c634dfaa896040518263ffffffff1660e01b81526004016105a59190611c96565b60206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f591906117fb565b83838151811061060157fe5b602002602001015160a001818152505082828151811061061d57fe5b602002602001015160a00151600014610772578061010001516001600160a01b031663e78c9b3b896040518263ffffffff1660e01b81526004016106619190611c96565b60206040518083038186803b15801561067957600080fd5b505afa15801561068d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b191906117fb565b8383815181106106bd57fe5b602002602001015160600181815250508061010001516001600160a01b03166379ce6b8c896040518263ffffffff1660e01b81526004016106fe9190611c96565b60206040518083038186803b15801561071657600080fd5b505afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e91906119f5565b64ffffffffff1683838151811061076157fe5b602002602001015160c00181815250505b50600101610330565b5093505050505b92915050565b60606000826001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd91906116c8565b9050806001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b15801561083857600080fd5b505afa15801561084c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087491908101906116e4565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060005b60208160ff161080156108d25750828160ff16602081106108c157fe5b1a60f81b6001600160f81b03191615155b156108df576001016108a4565b60608160ff1667ffffffffffffffff811180156108fb57600080fd5b506040519080825280601f01601f191660200182016040528015610926576020820181803683370190505b509050600091505b60208260ff1610801561095c5750838260ff166020811061094b57fe5b1a60f81b6001600160f81b03191615155b1561087457838260ff166020811061097057fe5b1a60f81b818360ff168151811061098357fe5b60200101906001600160f81b031916908160001a90535060019091019061092e565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606109d36114d1565b6000836001600160a01b031663fca513a86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0e57600080fd5b505afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906116c8565b90506000846001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abb91906116c8565b90506060816001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b158015610af857600080fd5b505afa158015610b0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3491908101906116e4565b90506060815167ffffffffffffffff81118015610b5057600080fd5b50604051908082528060200260200182016040528015610b8a57816020015b610b776114fc565b815260200190600190039081610b6f5790505b50905060005b825181101561102e57610ba16114fc565b828281518110610bad57fe5b60200260200101519050838281518110610bc357fe5b60209081029190910101516001600160a01b03168152610be1611466565b81516040516335ea6a7560e01b81526001600160a01b038816916335ea6a7591610c0e9190600401611c96565b6101806040518083038186803b158015610c2757600080fd5b505afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f919061189f565b60208101516001600160801b039081166101a085015260408083015182166101c0860152606083015182166101e08601526080830151821661020086015260a083015190911661022085015260c082015164ffffffffff1661024085015260e08201516001600160a01b03908116610260860152610100830151811661028086015261012083015181166102a086015261014083015181166102c08601528451915163b3596f0760e01b815292935089169163b3596f0791610d2391600401611c96565b60206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906117fb565b61038083015281516102608301516040516370a0823160e01b81526001600160a01b03909216916370a0823191610dac91600401611c96565b60206040518083038186803b158015610dc457600080fd5b505afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc91906117fb565b826102e00181815250508161028001516001600160a01b031663797743386040518163ffffffff1660e01b815260040160806040518083038186803b158015610e4457600080fd5b505afa158015610e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7c91906119b5565b64ffffffffff16610340860152610320850152506103008301526102a08201516040805163b1bf962d60e01b815290516001600160a01b039092169163b1bf962d91600480820192602092909190829003018186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906117fb565b8261036001818152505081600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610f5d57600080fd5b505afa158015610f71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f999190810190611813565b60408301528051610fa9906111cb565b60e0870152606086015260c085015260a084015260808301528051610fcd906111f6565b1515610140860152151561012085015215156101808401521515610160830152608082015115156101008301526102c082015161100990611232565b6104008601526103e08501526103c08401526103a09092019190915250600101610b90565b506110376114d1565b60405163e9833c2f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9833c2f906110a3907f000000000000000000000000000000000000000000000000000000000000000090600401611c96565b60206040518083038186803b1580156110bb57600080fd5b505afa1580156110cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f391906117fb565b6040820152600860608201526305f5e10080825260208201529095509350505050915091565b60006080821060405180604001604052806002815260200161373760f01b815250906111615760405162461bcd60e51b81526004016111589190611e15565b60405180910390fd5b5050815160016002830281019190911c16151592915050565b60006080821060405180604001604052806002815260200161373760f01b815250906111b95760405162461bcd60e51b81526004016111589190611e15565b50509051600160029092021c16151590565b5161ffff80821692601083901c821692602081901c831692603082901c60ff169260409290921c1690565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000909116151590565b600080600080846001600160a01b0316637b832f586040518163ffffffff1660e01b815260040160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906117fb565b856001600160a01b03166365614f816040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a91906117fb565b866001600160a01b0316630bdf953f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135357600080fd5b505afa158015611367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138b91906117fb565b876001600160a01b031663ccab01a36040518163ffffffff1660e01b815260040160206040518083038186803b1580156113c457600080fd5b505afa1580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc91906117fb565b93509350935093509193509193565b6040518060200160405280600081525090565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b60405180610180016040528061147a61140b565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101609091015290565b6040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b60405180610420016040528060006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160001515815260200160001515815260200160001515815260200160006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b0316815260200160006001600160801b03168152602001600064ffffffffff16815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b805161078281611e88565b600060208284031215611677578081fd5b6116816020611e31565b9151825250919050565b80516001600160801b038116811461078257600080fd5b805164ffffffffff8116811461078257600080fd5b805160ff8116811461078257600080fd5b6000602082840312156116d9578081fd5b815161087481611e88565b600060208083850312156116f6578182fd5b825167ffffffffffffffff8082111561170d578384fd5b818501915085601f830112611720578384fd5b81518181111561172e578485fd5b838102915061173e848301611e31565b8181528481019084860184860187018a1015611758578788fd5b8795505b838610156117825761176e8a8261165b565b83526001959095019491860191860161175c565b5098975050505050505050565b6000602082840312156117a0578081fd5b5035919050565b6000602082840312156117b8578081fd5b813561087481611e88565b600080604083850312156117d5578081fd5b82356117e081611e88565b915060208301356117f081611e88565b809150509250929050565b60006020828403121561180c578081fd5b5051919050565b600060208284031215611824578081fd5b815167ffffffffffffffff8082111561183b578283fd5b818401915084601f83011261184e578283fd5b81518181111561185c578384fd5b61186f601f8201601f1916602001611e31565b9150808252856020828501011115611885578384fd5b611896816020840160208601611e58565b50949350505050565b60006101808083850312156118b2578182fd5b6118bb81611e31565b90506118c78484611666565b81526118d6846020850161168b565b60208201526118e8846040850161168b565b60408201526118fa846060850161168b565b606082015261190c846080850161168b565b608082015261191e8460a0850161168b565b60a08201526119308460c085016116a2565b60c08201526119428460e0850161165b565b60e08201526101006119568582860161165b565b908201526101206119698585830161165b565b9082015261014061197c8585830161165b565b9082015261016061198f858583016116b7565b908201529392505050565b6000602082840312156119ab578081fd5b6108748383611666565b600080600080608085870312156119ca578182fd5b84519350602085015192506040850151915060608501516119ea81611ea0565b939692955090935050565b600060208284031215611a06578081fd5b815161087481611ea0565b6000610420611a21848451611c38565b6020830151816020860152611a3882860182611c4b565b91505060408301518482036040860152611a528282611c4b565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e085015261010080840151611a9a82870182611c45565b505061012080840151611aaf82870182611c45565b505061014080840151611ac482870182611c45565b505061016080840151611ad982870182611c45565b505061018080840151611aee82870182611c45565b50506101a080840151611b0382870182611c77565b50506101c080840151611b1882870182611c77565b50506101e080840151611b2d82870182611c77565b505061020080840151611b4282870182611c77565b505061022080840151611b5782870182611c77565b505061024080840151611b6c82870182611c84565b505061026080840151611b8182870182611c38565b505061028080840151611b9682870182611c38565b50506102a080840151611bab82870182611c38565b50506102c080840151611bc082870182611c38565b50506102e08381015190850152610300808401519085015261032080840151908501526103408084015190850152610360808401519085015261038080840151908501526103a080840151908501526103c080840151908501526103e080840151908501526104009283015192909301919091525090565b6001600160a01b03169052565b15159052565b60008151808452611c63816020860160208601611e58565b601f01601f19169290920160200192915050565b6001600160801b03169052565b64ffffffffff169052565b60ff169052565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611ceb5783516001600160a01b031683529284019291840191600101611cc6565b50909695505050505050565b600060a0820160a0835280855180835260c0850191506020925060c0838202860101838801855b83811015611d4c5760bf19888403018552611d3a838351611a11565b94860194925090850190600101611d1e565b505080945050505083518184015280840151604084015250604083015160608301526060830151611d806080840182611c8f565b509392505050565b602080825282518282018190526000919060409081850190868401855b82811015611e0857815180516001600160a01b03168552868101518786015285810151151586860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101611da5565b5091979650505050505050565b6000602082526108746020830184611c4b565b90815260200190565b60405181810167ffffffffffffffff81118282101715611e5057600080fd5b604052919050565b60005b83811015611e73578181015183820152602001611e5b565b83811115611e82576000848401525b50505050565b6001600160a01b0381168114611e9d57600080fd5b50565b64ffffffffff81168114611e9d57600080fdfea2646970667358221220daadee241c4dceb9902ac8945f1526580a2358bd45ae53d845d40f81119b702764736f6c634300060c0033';\n","import { providers } from 'ethers';\nimport { isAddress } from 'ethers/lib/utils';\nimport { WalletBalanceProvider as WalletBalanceProviderContract } from './typechain/WalletBalanceProvider';\nimport { WalletBalanceProviderFactory } from './typechain/WalletBalanceProviderFactory';\nimport {\n BalanceOfResponse,\n BatchBalanceOfResponse,\n UserWalletBalancesResponse,\n} from './types/WalletBalanceProviderTypes';\nexport * from './types/WalletBalanceProviderTypes';\n\nexport interface WalletBalanceProviderContext {\n walletBalanceProviderAddress: string;\n provider: providers.Provider;\n}\n\nexport class WalletBalanceProvider {\n private readonly _contract: WalletBalanceProviderContract;\n\n /**\n * Constructor\n * @param context The wallet balance provider context\n */\n public constructor(context: WalletBalanceProviderContext) {\n this._contract = WalletBalanceProviderFactory.connect(\n context.walletBalanceProviderAddress,\n context.provider,\n );\n }\n\n /**\n * Get the balance for a user on a token\n * @param user The user address\n * @param token The token address\n */\n public async balanceOf(\n user: string,\n token: string,\n ): Promise {\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n if (!isAddress(token)) {\n throw new Error('Token address is not a valid ethereum address');\n }\n\n return this._contract.balanceOf(user, token);\n }\n\n /**\n * Get the balance for a user on a token\n * @param users The users addresses\n * @param tokens The tokens addresses\n */\n public async batchBalanceOf(\n users: string[],\n tokens: string[],\n ): Promise {\n if (!users.every(u => isAddress(u))) {\n throw new Error(\n 'One of the user address is not a valid ethereum address',\n );\n }\n\n if (!tokens.every(u => isAddress(u))) {\n throw new Error(\n 'One of the token address is not a valid ethereum address',\n );\n }\n\n return this._contract.batchBalanceOf(users, tokens);\n }\n\n /**\n * Provides balances of user wallet for all reserves available on the pool\n * @param user The user\n * @param lendingPoolAddressProvider The lending pool address provider\n */\n public async getUserWalletBalancesForLendingPoolProvider(\n user: string,\n lendingPoolAddressProvider: string,\n ): Promise {\n if (!isAddress(user)) {\n throw new Error('User address is not a valid ethereum address');\n }\n\n if (!isAddress(lendingPoolAddressProvider)) {\n throw new Error(\n 'Lending pool address provider is not a valid ethereum address',\n );\n }\n\n return this._contract.getUserWalletBalances(\n lendingPoolAddressProvider,\n user,\n );\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Signer } from '@ethersproject/abstract-signer';\nimport { Provider } from '@ethersproject/providers';\nimport { Contract, ContractFactory } from '@ethersproject/contracts';\n\nimport { WalletBalanceProvider } from './WalletBalanceProvider';\n\nexport class WalletBalanceProviderFactory extends ContractFactory {\n constructor(signer?: Signer) {\n super(_abi, _bytecode, signer);\n }\n\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): WalletBalanceProvider {\n return (new Contract(\n address,\n _abi,\n signerOrProvider,\n ) as unknown) as WalletBalanceProvider;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'users',\n type: 'address[]',\n },\n {\n internalType: 'address[]',\n name: 'tokens',\n type: 'address[]',\n },\n ],\n name: 'batchBalanceOf',\n outputs: [\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'provider',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserWalletBalances',\n outputs: [\n {\n internalType: 'address[]',\n name: '',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: '',\n type: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n];\n\nconst _bytecode =\n '0x608060405234801561001057600080fd5b50610a63806100206000396000f3fe6080604052600436106100385760003560e01c80630240534314610072578063b59b28ef146100a9578063f7888aec146100d65761006d565b3661006d5761004633610103565b61006b5760405162461bcd60e51b8152600401610062906109c9565b60405180910390fd5b005b600080fd5b34801561007e57600080fd5b5061009261008d366004610758565b61013f565b6040516100a092919061092f565b60405180910390f35b3480156100b557600080fd5b506100c96100c4366004610790565b6104b1565b6040516100a0919061098f565b3480156100e257600080fd5b506100f66100f1366004610758565b61058d565b6040516100a091906109e5565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061013757508115155b949350505050565b6060806000846001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b5919061073c565b90506060816001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b1580156101f257600080fd5b505afa158015610206573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261022e91908101906107f9565b90506060815160010167ffffffffffffffff8111801561024d57600080fd5b50604051908082528060200260200182016040528015610277578160200160208202803683370190505b50905060005b82518110156102c65782818151811061029257fe5b60200260200101518282815181106102a657fe5b6001600160a01b039092166020928302919091019091015260010161027d565b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee818351815181106102e957fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506060815167ffffffffffffffff8111801561032357600080fd5b5060405190808252806020026020018201604052801561034d578160200160208202803683370190505b50905060005b835181101561046b576103646106b9565b856001600160a01b031663c44b11f785848151811061037f57fe5b60200260200101516040518263ffffffff1660e01b81526004016103a3919061091b565b60206040518083038186803b1580156103bb57600080fd5b505afa1580156103cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f391906108a4565b905060006104008261067d565b50505090508061042b57600084848151811061041857fe5b6020026020010181815250505050610463565b6104488a86858151811061043b57fe5b602002602001015161058d565b84848151811061045457fe5b60200260200101818152505050505b600101610353565b5061048a8773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61058d565b8184518151811061049757fe5b6020908102919091010152909450925050505b9250929050565b60608084830267ffffffffffffffff811180156104cd57600080fd5b506040519080825280602002602001820160405280156104f7578160200160208202803683370190505b50905060005b858110156105835760005b8481101561057a5761055588888481811061051f57fe5b90506020020160208101906105349190610719565b87878481811061054057fe5b90506020020160208101906100f19190610719565b83518490848802840190811061056757fe5b6020908102919091010152600101610508565b506001016104fd565b5095945050505050565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156105c557506001600160a01b03821631610677565b6105d7826001600160a01b0316610103565b1561065f576040516370a0823160e01b81526001600160a01b038316906370a082319061060890869060040161091b565b60206040518083038186803b15801561062057600080fd5b505afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065891906108c9565b9050610677565b60405162461bcd60e51b8152600401610062906109a2565b92915050565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000909116151590565b6040518060200160405280600081525090565b805161067781610a15565b60008083601f8401126106e8578182fd5b50813567ffffffffffffffff8111156106ff578182fd5b60208301915083602080830285010111156104aa57600080fd5b60006020828403121561072a578081fd5b813561073581610a15565b9392505050565b60006020828403121561074d578081fd5b815161073581610a15565b6000806040838503121561076a578081fd5b823561077581610a15565b9150602083013561078581610a15565b809150509250929050565b600080600080604085870312156107a5578182fd5b843567ffffffffffffffff808211156107bc578384fd5b6107c8888389016106d7565b909650945060208701359150808211156107e0578384fd5b506107ed878288016106d7565b95989497509550505050565b6000602080838503121561080b578182fd5b825167ffffffffffffffff80821115610822578384fd5b818501915085601f830112610835578384fd5b815181811115610843578485fd5b83810291506108538483016109ee565b8181528481019084860184860187018a101561086d578788fd5b8795505b83861015610897576108838a826106cc565b835260019590950194918601918601610871565b5098975050505050505050565b6000602082840312156108b5578081fd5b6108bf60206109ee565b9151825250919050565b6000602082840312156108da578081fd5b5051919050565b6000815180845260208085019450808401835b83811015610910578151875295820195908201906001016108f4565b509495945050505050565b6001600160a01b0391909116815260200190565b604080825283519082018190526000906020906060840190828701845b828110156109715781516001600160a01b03168452928401929084019060010161094c565b5050508381038285015261098581866108e1565b9695505050505050565b60006020825261073560208301846108e1565b6020808252600d908201526c24a72b20a624a22faa27a5a2a760991b604082015260600190565b602080825260029082015261191960f11b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610a0d57600080fd5b604052919050565b6001600160a01b0381168114610a2a57600080fd5b5056fea26469706673582212207ae67703d49267c117fb5657d5acf71315b42fa382a2989a68cd98ccc5351bc964736f6c634300060c0033';\n","import { constants, providers } from 'ethers';\nimport {\n BaseDebtToken,\n BaseDebtTokenInterface,\n} from '../baseDebtToken-contract';\nimport BaseService from '../commons/BaseService';\nimport {\n eEthereumTxType,\n EthereumTransactionTypeExtended,\n InterestRate,\n ProtocolAction,\n tEthereumAddress,\n transactionType,\n} from '../commons/types';\nimport { valueToWei } from '../commons/utils';\nimport { WETHValidator } from '../commons/validators/methodValidators';\nimport {\n is0OrPositiveAmount,\n isEthAddress,\n isPositiveAmount,\n isPositiveOrMinusOneAmount,\n} from '../commons/validators/paramValidators';\nimport { IERC20ServiceInterface } from '../erc20-contract';\nimport { IWETHGateway } from './typechain/IWETHGateway';\nimport { IWETHGateway__factory } from './typechain/IWETHGateway__factory';\n\nexport type WETHDepositParamsType = {\n lendingPool: tEthereumAddress;\n user: tEthereumAddress;\n amount: string; // normal\n onBehalfOf?: tEthereumAddress;\n referralCode?: string;\n};\n\nexport type WETHWithdrawParamsType = {\n lendingPool: tEthereumAddress;\n user: tEthereumAddress;\n amount: string;\n sTokenAddress: tEthereumAddress;\n onBehalfOf?: tEthereumAddress;\n};\n\nexport type WETHRepayParamsType = {\n lendingPool: tEthereumAddress;\n user: tEthereumAddress;\n amount: string;\n interestRateMode: InterestRate;\n onBehalfOf?: tEthereumAddress;\n};\n\nexport type WETHBorrowParamsType = {\n lendingPool: tEthereumAddress;\n user: tEthereumAddress;\n amount: string;\n debtTokenAddress: tEthereumAddress;\n interestRateMode: InterestRate;\n referralCode?: string;\n};\n\nexport interface WETHGatewayInterface {\n depositETH: (\n args: WETHDepositParamsType,\n ) => EthereumTransactionTypeExtended[];\n withdrawETH: (\n args: WETHWithdrawParamsType,\n ) => Promise;\n repayETH: (args: WETHRepayParamsType) => EthereumTransactionTypeExtended[];\n borrowETH: (\n args: WETHBorrowParamsType,\n ) => Promise;\n}\n\nexport class WETHGatewayService\n extends BaseService\n implements WETHGatewayInterface\n{\n readonly wethGatewayAddress: string;\n\n readonly baseDebtTokenService: BaseDebtTokenInterface;\n\n readonly erc20Service: IERC20ServiceInterface;\n\n constructor(\n provider: providers.Provider,\n erc20Service: IERC20ServiceInterface,\n wethGatewayAddress?: string,\n ) {\n super(provider, IWETHGateway__factory);\n this.erc20Service = erc20Service;\n\n this.baseDebtTokenService = new BaseDebtToken(\n this.provider,\n this.erc20Service,\n );\n\n this.wethGatewayAddress = wethGatewayAddress ?? '';\n\n this.depositETH = this.depositETH.bind(this);\n this.withdrawETH = this.withdrawETH.bind(this);\n this.repayETH = this.repayETH.bind(this);\n this.borrowETH = this.borrowETH.bind(this);\n }\n\n @WETHValidator\n public depositETH(\n @isEthAddress('lendingPool')\n @isEthAddress('user')\n @isEthAddress('onBehalfOf')\n @isPositiveAmount('amount')\n @is0OrPositiveAmount('referralCode')\n {\n lendingPool,\n user,\n amount,\n onBehalfOf,\n referralCode,\n }: WETHDepositParamsType,\n ): EthereumTransactionTypeExtended[] {\n const convertedAmount: string = valueToWei(amount, 18);\n\n const wethGatewayContract: IWETHGateway = this.getContractInstance(\n this.wethGatewayAddress,\n );\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n wethGatewayContract.populateTransaction.depositETH(\n lendingPool,\n onBehalfOf ?? user,\n referralCode ?? '0',\n ),\n from: user,\n value: convertedAmount,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n\n @WETHValidator\n public async borrowETH(\n @isEthAddress('lendingPool')\n @isEthAddress('user')\n @isPositiveAmount('amount')\n @isEthAddress('debtTokenAddress')\n @is0OrPositiveAmount('referralCode')\n {\n lendingPool,\n user,\n amount,\n debtTokenAddress,\n interestRateMode,\n referralCode,\n }: WETHBorrowParamsType,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const convertedAmount: string = valueToWei(amount, 18);\n const numericRateMode = interestRateMode === InterestRate.Variable ? 2 : 1;\n\n const delegationApproved: boolean =\n await this.baseDebtTokenService.isDelegationApproved({\n debtTokenAddress,\n allowanceGiver: user,\n allowanceReceiver: this.wethGatewayAddress,\n amount,\n });\n\n if (!delegationApproved) {\n const approveDelegationTx: EthereumTransactionTypeExtended =\n this.baseDebtTokenService.approveDelegation({\n user,\n delegatee: this.wethGatewayAddress,\n debtTokenAddress,\n amount: constants.MaxUint256.toString(),\n });\n\n txs.push(approveDelegationTx);\n }\n\n const wethGatewayContract: IWETHGateway = this.getContractInstance(\n this.wethGatewayAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n wethGatewayContract.populateTransaction.borrowETH(\n lendingPool,\n convertedAmount,\n numericRateMode,\n referralCode ?? '0',\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n txs,\n txCallback,\n ProtocolAction.borrowETH,\n ),\n });\n\n return txs;\n }\n\n @WETHValidator\n public async withdrawETH(\n @isEthAddress('lendingPool')\n @isEthAddress('user')\n @isEthAddress('onBehalfOf')\n @isPositiveOrMinusOneAmount('amount')\n @isEthAddress('sTokenAddress')\n {\n lendingPool,\n user,\n amount,\n onBehalfOf,\n sTokenAddress,\n }: WETHWithdrawParamsType,\n ): Promise {\n const txs: EthereumTransactionTypeExtended[] = [];\n const { isApproved, approve }: IERC20ServiceInterface = this.erc20Service;\n const convertedAmount: string =\n amount === '-1'\n ? constants.MaxUint256.toString()\n : valueToWei(amount, 18);\n\n const approved: boolean = await isApproved({\n token: sTokenAddress,\n user,\n spender: this.wethGatewayAddress,\n amount,\n });\n\n if (!approved) {\n const approveTx: EthereumTransactionTypeExtended = approve({\n user,\n token: sTokenAddress,\n spender: this.wethGatewayAddress,\n amount: constants.MaxUint256.toString(),\n });\n txs.push(approveTx);\n }\n\n const wethGatewayContract: IWETHGateway = this.getContractInstance(\n this.wethGatewayAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n wethGatewayContract.populateTransaction.withdrawETH(\n lendingPool,\n convertedAmount,\n onBehalfOf ?? user,\n ),\n from: user,\n });\n\n txs.push({\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation(\n txs,\n txCallback,\n ProtocolAction.withdrawETH,\n ),\n });\n\n return txs;\n }\n\n @WETHValidator\n public repayETH(\n @isEthAddress('lendingPool')\n @isEthAddress('user')\n @isEthAddress('onBehalfOf')\n @isPositiveAmount('amount')\n {\n lendingPool,\n user,\n amount,\n interestRateMode,\n onBehalfOf,\n }: WETHRepayParamsType,\n ): EthereumTransactionTypeExtended[] {\n const convertedAmount: string = valueToWei(amount, 18);\n const numericRateMode = interestRateMode === InterestRate.Variable ? 2 : 1;\n const wethGatewayContract: IWETHGateway = this.getContractInstance(\n this.wethGatewayAddress,\n );\n\n const txCallback: () => Promise = this.generateTxCallback({\n rawTxMethod: async () =>\n wethGatewayContract.populateTransaction.repayETH(\n lendingPool,\n convertedAmount,\n numericRateMode,\n onBehalfOf ?? user,\n ),\n gasSurplus: 30,\n from: user,\n value: convertedAmount,\n });\n\n return [\n {\n tx: txCallback,\n txType: eEthereumTxType.DLP_ACTION,\n gas: this.generateTxPriceEstimation([], txCallback),\n },\n ];\n }\n}\n","/* Autogenerated file. Do not edit manually. */\n/* eslint-disable */\n\nimport { Contract, Signer } from 'ethers';\nimport { Provider } from '@ethersproject/providers';\n\nimport type { IWETHGateway } from './IWETHGateway';\n\nexport class IWETHGateway__factory {\n static connect(\n address: string,\n signerOrProvider: Signer | Provider,\n ): IWETHGateway {\n return new Contract(address, _abi, signerOrProvider) as IWETHGateway;\n }\n}\n\nconst _abi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'lendingPool',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interesRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'borrowETH',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'lendingPool',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'depositETH',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'lendingPool',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'rateMode',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'repayETH',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'lendingPool',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'withdrawETH',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n];\n","import { BigNumber } from 'bignumber.js';\n\nexport { BigNumber };\n\nexport type BigNumberValue = string | number | BigNumber;\n\nexport const BigNumberZeroDecimal = BigNumber.clone({\n DECIMAL_PLACES: 0,\n ROUNDING_MODE: BigNumber.ROUND_DOWN,\n});\n\nexport function valueToBigNumber(amount: BigNumberValue): BigNumber {\n if (amount instanceof BigNumber) {\n return amount;\n }\n\n return new BigNumber(amount);\n}\n\nexport function valueToZDBigNumber(amount: BigNumberValue): BigNumber {\n return new BigNumberZeroDecimal(amount);\n}\n\nexport function normalize(n: BigNumberValue, decimals: number): string {\n return normalizeBN(n, decimals).toString(10);\n}\n\nexport function normalizeBN(n: BigNumberValue, decimals: number): BigNumber {\n return valueToBigNumber(n).shiftedBy(decimals * -1);\n}\n","import { valueToBigNumber } from './bignumber';\n\nexport const SECONDS_PER_YEAR = valueToBigNumber('31536000');\nexport const USD_DECIMALS = 8;\nexport const WEI_DECIMALS = 18;\nexport const RAY_DECIMALS = 27;\nexport const LTV_PRECISION = 4;\n","import BigNumber from 'bignumber.js';\nimport { BigNumberValue, valueToZDBigNumber } from '../../bignumber';\nimport { SECONDS_PER_YEAR } from '../../constants';\nimport { binomialApproximatedRayPow } from '../../ray.math';\n\nexport interface CalculateCompoundedInterestRequest {\n rate: BigNumberValue;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): BigNumber {\n const timeDelta = valueToZDBigNumber(currentTimestamp - lastUpdateTimestamp);\n const ratePerSecond = valueToZDBigNumber(rate).dividedBy(SECONDS_PER_YEAR);\n return binomialApproximatedRayPow(ratePerSecond, timeDelta);\n}\n","import BigNumber from 'bignumber.js';\n\nimport { BigNumber as BigNumberEthers, BigNumberish } from 'ethers';\nimport { valueToBigNumber, valueToZDBigNumber } from '../../bignumber';\nexport type BigNumberValue =\n | string\n | number\n | BigNumber\n | BigNumberEthers\n | BigNumberish;\n\nexport const BigNumberZD = BigNumber.clone({\n DECIMAL_PLACES: 0,\n ROUNDING_MODE: BigNumber.ROUND_DOWN,\n});\n\nexport const SECONDS_PER_MONTH = valueToZDBigNumber(2_592_000);\nexport const BN_ZERO = valueToZDBigNumber(0);\nexport const BN_ONE = valueToZDBigNumber(1);\nexport const BN_DECIMAL_PRECISION = valueToZDBigNumber(1e18);\n\nexport interface CalculateAccruedIncentivesRequest {\n principalUserBalance: BigNumber; // principal deposit or borrow amount\n reserveIndex: BigNumber; // tracks the interest earned by a reserve\n userIndex: BigNumber; // tracks the interest earned by a user from a particular reserve\n precision: number; // decimal precision of rewards calculation\n reserveIndexTimestamp: number; // timestamp of last protocol interaction\n totalSupply: BigNumber; // total deposits or borrows of a reserve\n currentTimestamp: number;\n incentiveIntialSupply: string;\n incentiveInflactionStart: string;\n incentiveDecayRatio: string;\n}\n\n// Calculate incentives earned by user since reserveIndexTimestamp\n// Incentives earned before reserveIndexTimestamp are tracked seperately (userUnclaimedRewards from UiIncentiveDataProvider)\n// This function is used for deposit, variableDebt, and stableDebt incentives\nexport function calculateAccruedIncentives({\n principalUserBalance,\n reserveIndex,\n userIndex,\n precision,\n reserveIndexTimestamp,\n totalSupply,\n currentTimestamp,\n incentiveIntialSupply,\n incentiveInflactionStart,\n incentiveDecayRatio,\n}: CalculateAccruedIncentivesRequest): BigNumber {\n if (totalSupply.isEqualTo(new BigNumber(0))) {\n return new BigNumber(0);\n }\n\n let currentReserveIndex;\n if (reserveIndexTimestamp === Number(currentTimestamp)) {\n currentReserveIndex = reserveIndex;\n } else {\n let cumulativeDelta = BN_ZERO;\n\n const ratio = valueToBigNumber(incentiveDecayRatio)\n .dividedBy(1e18)\n .toFixed(2);\n\n // scope to avoid stack too deep\n let lastSpan = BN_ZERO;\n if (\n valueToZDBigNumber(reserveIndexTimestamp).gt(\n valueToZDBigNumber(incentiveInflactionStart),\n )\n ) {\n lastSpan = valueToZDBigNumber(reserveIndexTimestamp).minus(\n valueToZDBigNumber(incentiveInflactionStart),\n );\n }\n\n let curSpan = valueToZDBigNumber(currentTimestamp).minus(\n valueToZDBigNumber(incentiveInflactionStart),\n );\n const lastDecayPeriod = lastSpan.dividedBy(SECONDS_PER_MONTH);\n const curDecayPeriod = valueToZDBigNumber(curSpan).div(SECONDS_PER_MONTH);\n\n for (let cur = curDecayPeriod; cur.gte(lastDecayPeriod); ) {\n const tail = BigNumber.max(lastSpan, cur.multipliedBy(SECONDS_PER_MONTH));\n\n cumulativeDelta = cumulativeDelta.plus(\n curSpan\n .minus(tail)\n .multipliedBy(BN_DECIMAL_PRECISION)\n .dividedBy(SECONDS_PER_MONTH)\n .multipliedBy(\n valueToZDBigNumber(ratio).exponentiatedBy(cur).multipliedBy(1e18),\n ),\n );\n\n if (cur.eq(BN_ZERO)) {\n break;\n } else {\n curSpan = cur.multipliedBy(SECONDS_PER_MONTH);\n cur = cur.minus(BN_ONE);\n }\n }\n\n currentReserveIndex = valueToZDBigNumber(incentiveIntialSupply)\n .multipliedBy(cumulativeDelta.dividedBy(BN_DECIMAL_PRECISION))\n .dividedBy(totalSupply);\n\n currentReserveIndex = currentReserveIndex.plus(reserveIndex);\n }\n\n // just for test purpose\n if (currentReserveIndex.isLessThan(userIndex)) {\n throw new Error('The latest share shall not be less than the previous one');\n }\n\n const reward = principalUserBalance\n .multipliedBy(currentReserveIndex.minus(userIndex))\n .shiftedBy(precision * -1);\n\n return reward;\n}\n","import {\n calculateReserveIncentives,\n CalculateReserveIncentivesResponse,\n} from './calculate-reserve-incentives';\nimport {\n ReserveCalculationData,\n ReserveIncentiveWithFeedsResponse,\n} from './types';\n\n// Indexed by reserve underlyingAsset address\nexport type ReserveIncentiveDict = Record;\n\ninterface ReserveIncentives {\n sIncentives: ReserveIncentive;\n vdIncentives: ReserveIncentive;\n sdIncentives: ReserveIncentive;\n}\n\ninterface ReserveIncentive {\n incentiveAPR: string;\n rewardTokenAddress: string;\n}\n\nexport interface CalculateAllReserveIncentivesRequest {\n reserveIncentives: ReserveIncentiveWithFeedsResponse[];\n reserves: ReserveCalculationData[];\n underlyingAsserDict?: Record;\n}\n\n// Calculate incentive token price from reserves data or priceFeed from UiIncentiveDataProvider\n\nfunction calculateRewardTokenPrice(\n reserves: ReserveCalculationData[],\n address: string,\n priceFeed: string,\n underlyingAssetDict?: Record,\n): string {\n const addressLowerCase = address.toLowerCase();\n const underlyingAssetAddress =\n underlyingAssetDict?.[addressLowerCase] ?? addressLowerCase;\n const rewardReserve = reserves.find(\n reserve => reserve.underlyingAsset.toLowerCase() === underlyingAssetAddress,\n );\n if (rewardReserve) {\n return rewardReserve.priceInMarketReferenceCurrency;\n }\n\n return priceFeed;\n}\n\nexport function calculateAllReserveIncentives({\n reserveIncentives,\n reserves,\n underlyingAsserDict,\n}: CalculateAllReserveIncentivesRequest): ReserveIncentiveDict {\n const reserveDict: ReserveIncentiveDict = {};\n // calculate incentive per reserve token\n reserveIncentives.forEach(reserveIncentive => {\n // Find the corresponding reserve data for each reserveIncentive\n const reserve: ReserveCalculationData | undefined = reserves.find(\n (reserve: ReserveCalculationData) =>\n reserve.underlyingAsset.toLowerCase() ===\n reserveIncentive.underlyingAsset.toLowerCase(),\n );\n if (reserve) {\n const calculatedReserveIncentives: CalculateReserveIncentivesResponse =\n calculateReserveIncentives({\n reserveIncentiveData: reserveIncentive,\n totalLiquidity: reserve.totalLiquidity,\n totalVariableDebt: reserve.totalVariableDebt,\n totalStableDebt: reserve.totalStableDebt,\n priceInMarketReferenceCurrency:\n reserve.priceInMarketReferenceCurrency,\n decimals: reserve.decimals,\n sRewardTokenPriceInMarketReferenceCurrency: calculateRewardTokenPrice(\n reserves,\n reserveIncentive.sIncentiveData.rewardTokenAddress.toLowerCase(),\n reserveIncentive.sIncentiveData.priceFeed,\n underlyingAsserDict,\n ),\n vdRewardTokenPriceInMarketReferenceCurrency:\n calculateRewardTokenPrice(\n reserves,\n reserveIncentive.vdIncentiveData.rewardTokenAddress.toLowerCase(),\n reserveIncentive.vdIncentiveData.priceFeed,\n underlyingAsserDict,\n ),\n sdRewardTokenPriceInMarketReferenceCurrency:\n calculateRewardTokenPrice(\n reserves,\n reserveIncentive.sdIncentiveData.rewardTokenAddress.toLowerCase(),\n reserveIncentive.sdIncentiveData.priceFeed,\n underlyingAsserDict,\n ),\n });\n reserveDict[calculatedReserveIncentives.underlyingAsset] = {\n sIncentives: calculatedReserveIncentives.sIncentivesData,\n vdIncentives: calculatedReserveIncentives.vdIncentivesData,\n sdIncentives: calculatedReserveIncentives.sdIncentivesData,\n };\n }\n });\n\n return reserveDict;\n}\n","import { BigNumber } from 'bignumber.js';\nimport { valueToZDBigNumber } from '../../bignumber';\nimport {\n calculateUserReserveIncentives,\n CalculateUserReserveIncentivesResponse,\n} from './calculate-user-reserve-incentives';\nimport {\n ReserveIncentiveWithFeedsResponse,\n UserReserveCalculationData,\n UserReserveIncentiveDataHumanizedResponse,\n} from './types';\n\n// Indexed by incentives controller address\nexport type UserIncentiveDict = Record;\n\ninterface UserIncentiveData {\n rewardTokenAddress: string;\n rewardTokenDecimals: number;\n claimableRewards: BigNumber;\n assets: string[];\n}\n\ninterface RewardCalculation {\n tokenAddress: string;\n incentiveController: string;\n rewardTokenAddress: string;\n rewardTokenDecimals: number;\n accruedRewards: BigNumber;\n unclaimedRewards: BigNumber;\n}\n\nexport interface CalculateAllUserIncentivesRequest {\n reserveIncentives: ReserveIncentiveWithFeedsResponse[]; // token incentive data, from UiIncentiveDataProvider\n userReserveIncentives: UserReserveIncentiveDataHumanizedResponse[]; // user incentive data, from UiIncentiveDataProvider\n userReserves: UserReserveCalculationData[]; // deposit and borrow data for user assets\n currentTimestamp: number;\n}\n\nexport function calculateAllUserIncentives({\n reserveIncentives,\n userReserveIncentives,\n userReserves,\n currentTimestamp,\n}: CalculateAllUserIncentivesRequest): UserIncentiveDict {\n // calculate incentive per token\n const rewards = userReserveIncentives\n .map((userReserveIncentive: UserReserveIncentiveDataHumanizedResponse) => {\n const reserve: ReserveIncentiveWithFeedsResponse | undefined =\n reserveIncentives.find(\n (reserve: ReserveIncentiveWithFeedsResponse) =>\n reserve.underlyingAsset === userReserveIncentive.underlyingAsset,\n );\n const userReserve: UserReserveCalculationData | undefined =\n userReserves.find(\n (reserve: UserReserveCalculationData) =>\n reserve.underlyingAsset === userReserveIncentive.underlyingAsset,\n );\n if (reserve) {\n let rewards: CalculateUserReserveIncentivesResponse = {\n sIncentives: valueToZDBigNumber('0'),\n vdIncentives: valueToZDBigNumber('0'),\n sdIncentives: valueToZDBigNumber('0'),\n };\n if (userReserve) {\n rewards = calculateUserReserveIncentives({\n reserveIncentives: reserve,\n userReserveIncentives: userReserveIncentive,\n userReserveData: userReserve,\n currentTimestamp,\n });\n }\n\n return [\n {\n tokenAddress:\n userReserveIncentive.STokenIncentivesUserData.tokenAddress,\n incentiveController:\n userReserveIncentive.STokenIncentivesUserData\n .incentiveControllerAddress,\n rewardTokenAddress:\n userReserveIncentive.STokenIncentivesUserData.rewardTokenAddress,\n rewardTokenDecimals:\n userReserveIncentive.STokenIncentivesUserData.rewardTokenDecimals,\n accruedRewards: new BigNumber(rewards.sIncentives),\n unclaimedRewards: new BigNumber(\n userReserveIncentive.STokenIncentivesUserData.userUnclaimedRewards,\n ),\n },\n {\n tokenAddress:\n userReserveIncentive.vdTokenIncentivesUserData.tokenAddress,\n incentiveController:\n userReserveIncentive.vdTokenIncentivesUserData\n .incentiveControllerAddress,\n rewardTokenAddress:\n userReserveIncentive.vdTokenIncentivesUserData.rewardTokenAddress,\n rewardTokenDecimals:\n userReserveIncentive.vdTokenIncentivesUserData\n .rewardTokenDecimals,\n accruedRewards: new BigNumber(rewards.vdIncentives),\n unclaimedRewards: new BigNumber(\n userReserveIncentive.vdTokenIncentivesUserData.userUnclaimedRewards,\n ),\n },\n {\n tokenAddress:\n userReserveIncentive.sdTokenIncentivesUserData.tokenAddress,\n incentiveController:\n userReserveIncentive.sdTokenIncentivesUserData\n .incentiveControllerAddress,\n rewardTokenAddress:\n userReserveIncentive.sdTokenIncentivesUserData.rewardTokenAddress,\n rewardTokenDecimals:\n userReserveIncentive.sdTokenIncentivesUserData\n .rewardTokenDecimals,\n accruedRewards: new BigNumber(rewards.sdIncentives),\n unclaimedRewards: new BigNumber(\n userReserveIncentive.sdTokenIncentivesUserData.userUnclaimedRewards,\n ),\n },\n ];\n }\n\n return [];\n })\n .flat();\n\n // normalize incentives per controller\n return rewards.reduce(\n (acc: UserIncentiveDict, reward: RewardCalculation) => {\n if (!acc[reward.incentiveController]) {\n acc[reward.incentiveController] = {\n assets: [],\n claimableRewards: reward.unclaimedRewards,\n rewardTokenAddress: reward.rewardTokenAddress,\n rewardTokenDecimals: reward.rewardTokenDecimals,\n };\n }\n\n if (reward.accruedRewards.gt(0)) {\n acc[reward.incentiveController].claimableRewards = acc[\n reward.incentiveController\n ].claimableRewards.plus(reward.accruedRewards);\n acc[reward.incentiveController].assets.push(reward.tokenAddress);\n }\n\n return acc;\n },\n {},\n );\n}\n","import {\n normalize,\n normalizeBN,\n valueToBigNumber,\n valueToZDBigNumber,\n} from '../../bignumber';\nimport { SECONDS_PER_YEAR, WEI_DECIMALS } from '../../constants';\n\nconst SECONDS_PER_MONTH = valueToZDBigNumber(2_592_000);\nconst BN_DECIMAL_PRECISION = valueToZDBigNumber(1e18);\n\nexport interface CalculateIncentiveAPRRequest {\n incentiveIntialSupply: string;\n incentiveInflactionStart: string;\n incentiveDecayRatio: string;\n rewardTokenPriceInMarketReferenceCurrency: string; // Can be priced in ETH or USD depending on market\n totasTokenSupply: string;\n priceInMarketReferenceCurrency: string; // Can be priced in ETH or USD depending on market\n decimals: number;\n rewardTokenDecimals: number;\n}\n\n// Calculate the APR for an incentive emission\nexport function calculateIncentiveAPR({\n incentiveIntialSupply,\n incentiveInflactionStart,\n incentiveDecayRatio,\n rewardTokenPriceInMarketReferenceCurrency,\n priceInMarketReferenceCurrency,\n totasTokenSupply,\n decimals,\n}: CalculateIncentiveAPRRequest): string {\n const currentTime: number = Date.parse(new Date().toString()) / 1000;\n const curSpan = valueToZDBigNumber(currentTime)\n .minus(valueToZDBigNumber(incentiveInflactionStart))\n .dividedBy(SECONDS_PER_MONTH);\n const emissionPerSecond = valueToBigNumber(incentiveIntialSupply)\n .multipliedBy(\n valueToBigNumber(incentiveDecayRatio)\n .dividedBy(BN_DECIMAL_PRECISION)\n .exponentiatedBy(curSpan),\n )\n .dividedBy(SECONDS_PER_MONTH);\n\n const emissionPerSecondNormalized = normalizeBN(\n emissionPerSecond,\n WEI_DECIMALS,\n ).multipliedBy(rewardTokenPriceInMarketReferenceCurrency);\n\n if (emissionPerSecondNormalized.eq(0)) {\n return '0';\n }\n\n const emissionPerYear =\n emissionPerSecondNormalized.multipliedBy(SECONDS_PER_YEAR);\n\n const totalSupplyNormalized = valueToBigNumber(\n normalize(totasTokenSupply, decimals),\n ).multipliedBy(priceInMarketReferenceCurrency);\n\n return emissionPerYear.dividedBy(totalSupplyNormalized).toFixed();\n}\n","import { calculateIncentiveAPR } from './calculate-incentive-apr';\nimport { ReserveIncentiveWithFeedsResponse } from './types';\n\nexport interface CalculateReserveIncentivesRequest {\n reserveIncentiveData: ReserveIncentiveWithFeedsResponse;\n sRewardTokenPriceInMarketReferenceCurrency: string; // Can be priced in ETH or USD depending on market\n vdRewardTokenPriceInMarketReferenceCurrency: string;\n sdRewardTokenPriceInMarketReferenceCurrency: string;\n totalLiquidity: string;\n totalVariableDebt: string;\n totalStableDebt: string;\n decimals: number;\n priceInMarketReferenceCurrency: string; // Can be priced in ETH or USD depending on market\n}\n\ninterface ReserveIncentiveResponse {\n incentiveAPR: string;\n rewardTokenAddress: string;\n}\nexport interface CalculateReserveIncentivesResponse {\n underlyingAsset: string;\n sIncentivesData: ReserveIncentiveResponse;\n vdIncentivesData: ReserveIncentiveResponse;\n sdIncentivesData: ReserveIncentiveResponse;\n}\n\n// Calculate deposit, variableBorrow, and stableBorrow incentives APR for a reserve asset\nexport function calculateReserveIncentives({\n reserveIncentiveData,\n sRewardTokenPriceInMarketReferenceCurrency,\n vdRewardTokenPriceInMarketReferenceCurrency,\n sdRewardTokenPriceInMarketReferenceCurrency,\n totalLiquidity,\n totalVariableDebt,\n totalStableDebt,\n decimals,\n priceInMarketReferenceCurrency,\n}: CalculateReserveIncentivesRequest): CalculateReserveIncentivesResponse {\n const lIncentivesAPR = calculateIncentiveAPR({\n incentiveIntialSupply:\n reserveIncentiveData.sIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentiveData.sIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio:\n reserveIncentiveData.sIncentiveData.incentiveDecayRatio,\n rewardTokenPriceInMarketReferenceCurrency:\n sRewardTokenPriceInMarketReferenceCurrency,\n priceInMarketReferenceCurrency,\n totasTokenSupply: totalLiquidity,\n decimals,\n rewardTokenDecimals:\n reserveIncentiveData.sIncentiveData.rewardTokenDecimals,\n });\n\n const vdIncentivesAPR = calculateIncentiveAPR({\n incentiveIntialSupply:\n reserveIncentiveData.vdIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentiveData.vdIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio:\n reserveIncentiveData.vdIncentiveData.incentiveDecayRatio,\n rewardTokenPriceInMarketReferenceCurrency:\n vdRewardTokenPriceInMarketReferenceCurrency,\n priceInMarketReferenceCurrency,\n totasTokenSupply: totalVariableDebt,\n decimals,\n rewardTokenDecimals:\n reserveIncentiveData.sIncentiveData.rewardTokenDecimals,\n });\n\n const sdIncentivesAPR = calculateIncentiveAPR({\n incentiveIntialSupply:\n reserveIncentiveData.sdIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentiveData.sdIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio:\n reserveIncentiveData.sdIncentiveData.incentiveDecayRatio,\n rewardTokenPriceInMarketReferenceCurrency:\n sdRewardTokenPriceInMarketReferenceCurrency,\n priceInMarketReferenceCurrency,\n totasTokenSupply: totalStableDebt,\n decimals,\n rewardTokenDecimals:\n reserveIncentiveData.sIncentiveData.rewardTokenDecimals,\n });\n\n return {\n underlyingAsset: reserveIncentiveData.underlyingAsset,\n sIncentivesData: {\n incentiveAPR: lIncentivesAPR,\n rewardTokenAddress:\n reserveIncentiveData.sIncentiveData.rewardTokenAddress,\n },\n vdIncentivesData: {\n incentiveAPR: vdIncentivesAPR,\n rewardTokenAddress:\n reserveIncentiveData.vdIncentiveData.rewardTokenAddress,\n },\n sdIncentivesData: {\n incentiveAPR: sdIncentivesAPR,\n rewardTokenAddress:\n reserveIncentiveData.sdIncentiveData.rewardTokenAddress,\n },\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { rayDiv } from '../../ray.math';\nimport { calculateAccruedIncentives } from './calculate-accrued-incentives';\nimport {\n ReserveIncentiveWithFeedsResponse,\n UserReserveCalculationData,\n UserReserveIncentiveDataHumanizedResponse,\n} from './types';\n\nexport interface CalculateUserReserveIncentivesRequest {\n reserveIncentives: ReserveIncentiveWithFeedsResponse; // token incentive data, from UiIncentiveDataProvider\n userReserveIncentives: UserReserveIncentiveDataHumanizedResponse; // user incentive data, from UiIncentiveDataProvider\n currentTimestamp: number;\n userReserveData: UserReserveCalculationData;\n}\n\nexport interface CalculateUserReserveIncentivesResponse {\n sIncentives: BigNumber; // deposit incentives\n vdIncentives: BigNumber; // variable debt incentives\n sdIncentives: BigNumber; // stable debt incentives\n}\n\n// Calculate user deposit and borrow incentives for an individual reserve asset\nexport function calculateUserReserveIncentives({\n reserveIncentives,\n userReserveIncentives,\n currentTimestamp,\n userReserveData,\n}: CalculateUserReserveIncentivesRequest): CalculateUserReserveIncentivesResponse {\n const totalDeposits = rayDiv(\n new BigNumber(userReserveData.totalLiquidity),\n new BigNumber(userReserveData.liquidityIndex),\n );\n const sIncentivesRequest = {\n principalUserBalance: new BigNumber(userReserveData.scaledSTokenBalance),\n reserveIndex: new BigNumber(\n reserveIncentives.sIncentiveData.tokenIncentivesIndex,\n ),\n userIndex: new BigNumber(\n userReserveIncentives.STokenIncentivesUserData.tokenIncentivesUserIndex,\n ),\n precision: reserveIncentives.sIncentiveData.precision,\n rewardTokenDecimals: reserveIncentives.sIncentiveData.rewardTokenDecimals,\n reserveIndexTimestamp:\n reserveIncentives.sIncentiveData.incentivesLastUpdateTimestamp,\n totalSupply: totalDeposits,\n currentTimestamp,\n incentiveIntialSupply:\n reserveIncentives.sIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentives.sIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio: reserveIncentives.sIncentiveData.incentiveDecayRatio,\n };\n\n const vdIncentivesRequest = {\n principalUserBalance: new BigNumber(userReserveData.scaledVariableDebt),\n reserveIndex: new BigNumber(\n reserveIncentives.vdIncentiveData.tokenIncentivesIndex,\n ),\n userIndex: new BigNumber(\n userReserveIncentives.vdTokenIncentivesUserData.tokenIncentivesUserIndex,\n ),\n precision: reserveIncentives.vdIncentiveData.precision,\n rewardTokenDecimals: reserveIncentives.vdIncentiveData.rewardTokenDecimals,\n reserveIndexTimestamp:\n reserveIncentives.vdIncentiveData.incentivesLastUpdateTimestamp,\n totalSupply: new BigNumber(userReserveData.totalScaledVariableDebt),\n currentTimestamp,\n incentiveIntialSupply:\n reserveIncentives.vdIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentives.vdIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio: reserveIncentives.vdIncentiveData.incentiveDecayRatio,\n };\n\n const sdIncentivesRequest = {\n principalUserBalance: new BigNumber(userReserveData.principalStableDebt),\n reserveIndex: new BigNumber(\n reserveIncentives.sdIncentiveData.tokenIncentivesIndex,\n ),\n userIndex: new BigNumber(\n userReserveIncentives.sdTokenIncentivesUserData.tokenIncentivesUserIndex,\n ),\n precision: reserveIncentives.sdIncentiveData.precision,\n rewardTokenDecimals: reserveIncentives.sdIncentiveData.rewardTokenDecimals,\n reserveIndexTimestamp:\n reserveIncentives.sdIncentiveData.incentivesLastUpdateTimestamp,\n totalSupply: new BigNumber(userReserveData.totalPrincipalStableDebt),\n currentTimestamp,\n incentiveIntialSupply:\n reserveIncentives.sdIncentiveData.incentiveIntialSupply,\n incentiveInflactionStart:\n reserveIncentives.sdIncentiveData.incentiveInflactionStart,\n incentiveDecayRatio: reserveIncentives.sdIncentiveData.incentiveDecayRatio,\n };\n\n const sIncentives = calculateAccruedIncentives(sIncentivesRequest);\n const vdIncentives = calculateAccruedIncentives(vdIncentivesRequest);\n const sdIncentives = calculateAccruedIncentives(sdIncentivesRequest);\n\n return { sIncentives, vdIncentives, sdIncentives };\n}\n","export * from './calculate-all-user-incentives';\nexport * from './calculate-all-reserve-incentives';\nexport * from './types';\n","import BigNumber from 'bignumber.js';\nimport { rayMul } from '../../ray.math';\nimport { calculateCompoundedInterest } from '../compounded-interest/calculate-compounded-interest';\n\nexport interface CalculateReserveDebtRequest {\n totalScaledVariableDebt: string;\n variableBorrowIndex: string;\n totalPrincipalStableDebt: string;\n variableBorrowRate: string;\n lastUpdateTimestamp: number;\n averageStableRate: string;\n stableDebtLastUpdateTimestamp: number;\n}\n\nexport interface CalculateReserveDebtResponse {\n totalVariableDebt: BigNumber;\n totalStableDebt: BigNumber;\n totalDebt: BigNumber;\n}\n\nexport function calculateReserveDebt(\n reserveDebt: CalculateReserveDebtRequest,\n currentTimestamp: number,\n): CalculateReserveDebtResponse {\n const timestamp = currentTimestamp;\n const totalVariableDebt = getTotalVariableDebt(reserveDebt, timestamp);\n const totalStableDebt = getTotalStableDebt(reserveDebt, timestamp);\n\n return {\n totalVariableDebt,\n totalStableDebt,\n totalDebt: totalVariableDebt.plus(totalStableDebt),\n };\n}\n\nfunction getTotalVariableDebt(\n reserveDebt: CalculateReserveDebtRequest,\n currentTimestamp: number,\n): BigNumber {\n return rayMul(\n rayMul(\n reserveDebt.totalScaledVariableDebt,\n reserveDebt.variableBorrowIndex,\n ),\n calculateCompoundedInterest({\n rate: reserveDebt.variableBorrowRate,\n currentTimestamp,\n lastUpdateTimestamp: reserveDebt.lastUpdateTimestamp,\n }),\n );\n}\n\nfunction getTotalStableDebt(\n reserveDebt: CalculateReserveDebtRequest,\n currentTimestamp: number,\n): BigNumber {\n return rayMul(\n reserveDebt.totalPrincipalStableDebt,\n calculateCompoundedInterest({\n rate: reserveDebt.averageStableRate,\n currentTimestamp,\n lastUpdateTimestamp: reserveDebt.stableDebtLastUpdateTimestamp,\n }),\n );\n}\n","import BigNumber from 'bignumber.js';\nimport {\n BigNumberValue,\n normalize,\n valueToBigNumber,\n valueToZDBigNumber,\n} from '../../bignumber';\nimport { RAY_DECIMALS, SECONDS_PER_YEAR } from '../../constants';\nimport { LTV_PRECISION, RAY, rayPow } from '../../index';\nimport { nativeToUSD } from '../usd/native-to-usd';\nimport { calculateReserveDebt } from './calculate-reserve-debt';\n\nexport interface FormatReserveResponse {\n reserveFactor: string;\n baseLTVasCollateral: string;\n liquidityIndex: string;\n reserveLiquidationThreshold: string;\n reserveLiquidationBonus: string;\n variableBorrowIndex: string;\n availableLiquidity: string;\n supplyAPY: string;\n supplyAPR: string;\n variableBorrowAPY: string;\n variableBorrowAPR: string;\n stableBorrowAPY: string;\n stableBorrowAPR: string;\n totalPrincipalStableDebt: string;\n totalScaledVariableDebt: string;\n utilizationRate: string;\n totalStableDebt: string;\n totalVariableDebt: string;\n totalDebt: string;\n totalLiquidity: string;\n}\n\nexport interface FormatReserveRequest {\n reserve: ReserveData;\n currentTimestamp: number;\n}\n\nexport interface ReserveData {\n decimals: number;\n reserveFactor: string;\n baseLTVasCollateral: string;\n averageStableRate: string;\n stableDebtLastUpdateTimestamp: number;\n liquidityIndex: string;\n reserveLiquidationThreshold: string;\n reserveLiquidationBonus: string;\n variableBorrowIndex: string;\n variableBorrowRate: string;\n availableLiquidity: string;\n stableBorrowRate: string;\n liquidityRate: string;\n totalPrincipalStableDebt: string;\n totalScaledVariableDebt: string;\n lastUpdateTimestamp: number;\n}\n\ninterface GetComputedReserveFieldsResponse {\n totalDebt: BigNumber;\n totalStableDebt: BigNumber;\n totalVariableDebt: BigNumber;\n totalLiquidity: BigNumber;\n utilizationRate: string;\n reserveLiquidationBonus: string;\n supplyAPY: BigNumber;\n variableBorrowAPY: BigNumber;\n stableBorrowAPY: BigNumber;\n}\n\n/**\n * @description accrues interest and adds computed fields\n */\nexport function getComputedReserveFields({\n reserve,\n currentTimestamp,\n}: FormatReserveRequest): GetComputedReserveFieldsResponse {\n const { totalDebt, totalStableDebt, totalVariableDebt } =\n calculateReserveDebt(reserve, currentTimestamp);\n const totalLiquidity = totalDebt.plus(reserve.availableLiquidity);\n const utilizationRate = totalLiquidity.eq(0)\n ? '0'\n : valueToBigNumber(totalDebt).dividedBy(totalLiquidity).toFixed();\n // https://github.com/aave/protocol-v2/blob/baeb455fad42d3160d571bd8d3a795948b72dd85/contracts/protocol/lendingpool/LendingPoolConfigurator.sol#L284\n const reserveLiquidationBonus = normalize(\n valueToBigNumber(reserve.reserveLiquidationBonus).minus(\n 10 ** LTV_PRECISION,\n ),\n LTV_PRECISION,\n );\n\n const supplyAPY = rayPow(\n valueToZDBigNumber(reserve.liquidityRate)\n .dividedBy(SECONDS_PER_YEAR)\n .plus(RAY),\n SECONDS_PER_YEAR,\n ).minus(RAY);\n\n const variableBorrowAPY = rayPow(\n valueToZDBigNumber(reserve.variableBorrowRate)\n .dividedBy(SECONDS_PER_YEAR)\n .plus(RAY),\n SECONDS_PER_YEAR,\n ).minus(RAY);\n\n const stableBorrowAPY = rayPow(\n valueToZDBigNumber(reserve.stableBorrowRate)\n .dividedBy(SECONDS_PER_YEAR)\n .plus(RAY),\n SECONDS_PER_YEAR,\n ).minus(RAY);\n\n return {\n totalDebt,\n totalStableDebt,\n totalVariableDebt,\n totalLiquidity,\n utilizationRate,\n reserveLiquidationBonus,\n supplyAPY,\n variableBorrowAPY,\n stableBorrowAPY,\n };\n}\n\ninterface FormatEnhancedReserveRequest {\n reserve: ReserveData & GetComputedReserveFieldsResponse;\n}\n/**\n * @description normalizes reserve values & computed fields\n */\nexport function formatEnhancedReserve({\n reserve,\n}: FormatEnhancedReserveRequest): FormatReserveResponse {\n const normalizeWithReserve = (n: BigNumberValue) =>\n normalize(n, reserve.decimals);\n\n return {\n totalVariableDebt: normalizeWithReserve(reserve.totalVariableDebt),\n totalStableDebt: normalizeWithReserve(reserve.totalStableDebt),\n totalLiquidity: normalizeWithReserve(reserve.totalLiquidity),\n availableLiquidity: normalizeWithReserve(reserve.availableLiquidity),\n utilizationRate: reserve.utilizationRate,\n totalDebt: normalizeWithReserve(reserve.totalDebt),\n baseLTVasCollateral: normalize(reserve.baseLTVasCollateral, LTV_PRECISION),\n reserveFactor: normalize(reserve.reserveFactor, LTV_PRECISION),\n supplyAPY: normalize(reserve.supplyAPY, RAY_DECIMALS),\n supplyAPR: normalize(reserve.liquidityRate, RAY_DECIMALS),\n variableBorrowAPY: normalize(reserve.variableBorrowAPY, RAY_DECIMALS),\n variableBorrowAPR: normalize(reserve.variableBorrowRate, RAY_DECIMALS),\n stableBorrowAPY: normalize(reserve.stableBorrowAPY, RAY_DECIMALS),\n stableBorrowAPR: normalize(reserve.stableBorrowRate, RAY_DECIMALS),\n liquidityIndex: normalize(reserve.liquidityIndex, RAY_DECIMALS),\n reserveLiquidationThreshold: normalize(\n reserve.reserveLiquidationThreshold,\n 4,\n ),\n reserveLiquidationBonus: reserve.reserveLiquidationBonus,\n totalScaledVariableDebt: normalizeWithReserve(\n reserve.totalScaledVariableDebt,\n ),\n totalPrincipalStableDebt: normalizeWithReserve(\n reserve.totalPrincipalStableDebt,\n ),\n variableBorrowIndex: normalize(reserve.variableBorrowIndex, RAY_DECIMALS),\n };\n}\n\n/**\n * @description computes additional fields and normalizes numbers into human readable decimals\n */\nexport function formatReserve({\n reserve,\n currentTimestamp,\n}: FormatReserveRequest): FormatReserveResponse {\n const computedFields = getComputedReserveFields({\n reserve,\n currentTimestamp,\n });\n return formatEnhancedReserve({ reserve: { ...reserve, ...computedFields } });\n}\n\nexport type ReserveDataWithPrice = ReserveData & {\n priceInMarketReferenceCurrency: string;\n};\n\nexport interface FormatReserveUSDRequest {\n reserve: ReserveDataWithPrice;\n currentTimestamp: number;\n marketRefPriceInUsd: string;\n marketRefCurrencyDecimals: number;\n}\n\n/**\n * @description computes additional fields and normalizes numbers into human readable decimals\n * In addition to that it also converts the numbers to USD\n */\nexport function formatReserveUSD({\n reserve,\n currentTimestamp,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n}: FormatReserveUSDRequest) {\n const computedFields = getComputedReserveFields({\n reserve,\n currentTimestamp,\n });\n const formattedReserve = formatEnhancedReserve({\n reserve: { ...reserve, ...computedFields },\n });\n\n return {\n ...formattedReserve,\n totalLiquidityUSD: nativeToUSD({\n amount: computedFields.totalLiquidity,\n currencyDecimals: reserve.decimals,\n marketRefCurrencyDecimals,\n priceInMarketReferenceCurrency: reserve.priceInMarketReferenceCurrency,\n marketRefPriceInUsd,\n }),\n totalDebtUSD: nativeToUSD({\n amount: computedFields.totalDebt,\n currencyDecimals: reserve.decimals,\n marketRefCurrencyDecimals,\n priceInMarketReferenceCurrency: reserve.priceInMarketReferenceCurrency,\n marketRefPriceInUsd,\n }),\n totalVariableDebtUSD: nativeToUSD({\n amount: computedFields.totalVariableDebt,\n currencyDecimals: reserve.decimals,\n marketRefCurrencyDecimals,\n priceInMarketReferenceCurrency: reserve.priceInMarketReferenceCurrency,\n marketRefPriceInUsd,\n }),\n totalStableDebtUSD: nativeToUSD({\n amount: computedFields.totalStableDebt,\n currencyDecimals: reserve.decimals,\n marketRefCurrencyDecimals,\n priceInMarketReferenceCurrency: reserve.priceInMarketReferenceCurrency,\n marketRefPriceInUsd,\n }),\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { BigNumberValue } from '../../bignumber';\nimport { USD_DECIMALS } from '../../constants';\n\ninterface NativeToUSD {\n amount: BigNumber;\n currencyDecimals: number;\n priceInMarketReferenceCurrency: BigNumberValue;\n marketRefCurrencyDecimals: number;\n marketRefPriceInUsd: BigNumberValue;\n}\n\nexport function nativeToUSD({\n amount,\n currencyDecimals,\n priceInMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n marketRefPriceInUsd,\n}: NativeToUSD) {\n return amount\n .multipliedBy(priceInMarketReferenceCurrency)\n .multipliedBy(marketRefPriceInUsd)\n .dividedBy(\n new BigNumber(1).shiftedBy(\n currencyDecimals + marketRefCurrencyDecimals + USD_DECIMALS,\n ),\n )\n .toString();\n}\n","import BigNumber from 'bignumber.js';\nimport { calculateCompoundedInterest } from '../../pool-math';\nimport { rayMul } from '../../ray.math';\n\nexport interface SuppliesRequest {\n reserve: ReserveSupplyData;\n currentTimestamp: number;\n}\n\nexport interface SuppliesResponse {\n totalVariableDebt: BigNumber;\n totalStableDebt: BigNumber;\n totalLiquidity: BigNumber;\n}\n\ninterface ReserveSupplyData {\n totalScaledVariableDebt: string;\n variableBorrowIndex: string;\n variableBorrowRate: string;\n totalPrincipalStableDebt: string;\n averageStableRate: string;\n availableLiquidity: string;\n stableDebtLastUpdateTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateSupplies({\n reserve,\n currentTimestamp,\n}: SuppliesRequest): SuppliesResponse {\n const { totalVariableDebt, totalStableDebt } =\n calculateReserveDebtSuppliesRaw({\n reserve,\n currentTimestamp,\n });\n\n const totalDebt = totalVariableDebt.plus(totalStableDebt);\n\n const totalLiquidity = totalDebt.plus(reserve.availableLiquidity);\n return {\n totalVariableDebt,\n totalStableDebt,\n totalLiquidity,\n };\n}\n\ninterface ReserveDebtSuppliesRawRequest {\n reserve: ReserveSupplyData;\n currentTimestamp: number;\n}\n\ninterface ReserveDebtSuppliesRawResponse {\n totalVariableDebt: BigNumber;\n totalStableDebt: BigNumber;\n}\n\n/**\n * Calculates the debt accrued to a given point in time.\n * @param reserve\n * @param currentTimestamp unix timestamp which must be higher than reserve.lastUpdateTimestamp\n */\nfunction calculateReserveDebtSuppliesRaw({\n reserve,\n currentTimestamp,\n}: ReserveDebtSuppliesRawRequest): ReserveDebtSuppliesRawResponse {\n const totalVariableDebt = rayMul(\n rayMul(reserve.totalScaledVariableDebt, reserve.variableBorrowIndex),\n calculateCompoundedInterest({\n rate: reserve.variableBorrowRate,\n currentTimestamp,\n lastUpdateTimestamp: reserve.lastUpdateTimestamp,\n }),\n );\n const totalStableDebt = rayMul(\n reserve.totalPrincipalStableDebt,\n calculateCompoundedInterest({\n rate: reserve.averageStableRate,\n currentTimestamp,\n lastUpdateTimestamp: reserve.stableDebtLastUpdateTimestamp,\n }),\n );\n return { totalVariableDebt, totalStableDebt };\n}\n","import BigNumber from 'bignumber.js';\nimport { valueToBigNumber, valueToZDBigNumber } from '../../bignumber';\nimport { UserReserveSummaryResponse } from './generate-user-reserve-summary';\n\ninterface UserReserveTotalsRequest {\n userReserves: UserReserveSummaryResponse[];\n}\n\ninterface UserReserveTotalsResponse {\n totalLiquidityMarketReferenceCurrency: BigNumber;\n totalBorrowsMarketReferenceCurrency: BigNumber;\n totalCollateralMarketReferenceCurrency: BigNumber;\n currentLtv: BigNumber;\n currentLiquidationThreshold: BigNumber;\n}\n\nexport function calculateUserReserveTotals({\n userReserves,\n}: UserReserveTotalsRequest): UserReserveTotalsResponse {\n let totalLiquidityMarketReferenceCurrency = valueToZDBigNumber('0');\n let totalCollateralMarketReferenceCurrency = valueToZDBigNumber('0');\n let totalBorrowsMarketReferenceCurrency = valueToZDBigNumber('0');\n let currentLtv = valueToBigNumber('0');\n let currentLiquidationThreshold = valueToBigNumber('0');\n\n userReserves.forEach(userReserveSummary => {\n totalLiquidityMarketReferenceCurrency =\n totalLiquidityMarketReferenceCurrency.plus(\n userReserveSummary.underlyingBalanceMarketReferenceCurrency,\n );\n totalBorrowsMarketReferenceCurrency = totalBorrowsMarketReferenceCurrency\n .plus(userReserveSummary.variableBorrowsMarketReferenceCurrency)\n .plus(userReserveSummary.stableBorrowsMarketReferenceCurrency);\n\n if (\n userReserveSummary.userReserve.reserve.usageAsCollateralEnabled &&\n userReserveSummary.userReserve.usageAsCollateralEnabledOnUser\n ) {\n totalCollateralMarketReferenceCurrency =\n totalCollateralMarketReferenceCurrency.plus(\n userReserveSummary.underlyingBalanceMarketReferenceCurrency,\n );\n currentLtv = currentLtv.plus(\n valueToBigNumber(\n userReserveSummary.underlyingBalanceMarketReferenceCurrency,\n ).multipliedBy(\n userReserveSummary.userReserve.reserve.baseLTVasCollateral,\n ),\n );\n currentLiquidationThreshold = currentLiquidationThreshold.plus(\n valueToBigNumber(\n userReserveSummary.underlyingBalanceMarketReferenceCurrency,\n ).multipliedBy(\n userReserveSummary.userReserve.reserve.reserveLiquidationThreshold,\n ),\n );\n }\n });\n\n if (currentLtv.gt(0)) {\n currentLtv = valueToZDBigNumber(\n currentLtv.div(totalCollateralMarketReferenceCurrency),\n );\n }\n\n if (currentLiquidationThreshold.gt(0)) {\n currentLiquidationThreshold = valueToZDBigNumber(\n currentLiquidationThreshold.div(totalCollateralMarketReferenceCurrency),\n );\n }\n\n return {\n totalLiquidityMarketReferenceCurrency,\n totalBorrowsMarketReferenceCurrency,\n totalCollateralMarketReferenceCurrency,\n currentLtv,\n currentLiquidationThreshold,\n };\n}\n","import {\n BigNumberValue,\n normalize,\n valueToBigNumber,\n valueToZDBigNumber,\n} from '../../bignumber';\nimport { LTV_PRECISION, RAY_DECIMALS, SECONDS_PER_YEAR } from '../../constants';\nimport { RAY, rayPow } from '../../ray.math';\nimport { UserReserveSummaryResponse } from './generate-user-reserve-summary';\nimport { ComputedUserReserve } from './index';\n\nexport interface FormatUserReserveRequest {\n reserve: UserReserveSummaryResponse;\n marketRefCurrencyDecimals: number;\n}\n\nexport interface FormatUserReserveResponse {\n reserve: ComputedUserReserve;\n}\n\nexport function formatUserReserve({\n reserve: _reserve,\n marketRefCurrencyDecimals,\n}: FormatUserReserveRequest): ComputedUserReserve {\n const { userReserve } = _reserve;\n const { reserve } = userReserve;\n const reserveDecimals = reserve.decimals;\n\n const normalizeWithReserve = (n: BigNumberValue) =>\n normalize(n, reserve.decimals);\n\n const exactStableBorrowRate = rayPow(\n valueToZDBigNumber(userReserve.stableBorrowRate)\n .dividedBy(SECONDS_PER_YEAR)\n .plus(RAY),\n SECONDS_PER_YEAR,\n ).minus(RAY);\n\n return {\n ...userReserve,\n reserve: {\n ...reserve,\n reserveLiquidationBonus: normalize(\n valueToBigNumber(reserve.reserveLiquidationBonus).shiftedBy(\n LTV_PRECISION,\n ),\n LTV_PRECISION,\n ),\n },\n scaledSTokenBalance: normalizeWithReserve(userReserve.scaledSTokenBalance),\n underlyingBalance: normalize(_reserve.underlyingBalance, reserveDecimals),\n underlyingBalanceMarketReferenceCurrency: normalize(\n _reserve.underlyingBalanceMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n underlyingBalanceUSD: _reserve.underlyingBalanceUSD.toString(),\n stableBorrows: normalizeWithReserve(_reserve.stableBorrows),\n stableBorrowsMarketReferenceCurrency: normalize(\n _reserve.stableBorrowsMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n stableBorrowsUSD: _reserve.stableBorrowsUSD.toString(),\n variableBorrows: normalizeWithReserve(_reserve.variableBorrows),\n variableBorrowsMarketReferenceCurrency: normalize(\n _reserve.variableBorrowsMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n variableBorrowsUSD: _reserve.variableBorrowsUSD.toString(),\n totalBorrows: normalizeWithReserve(_reserve.totalBorrows),\n totalBorrowsMarketReferenceCurrency: normalize(\n _reserve.totalBorrowsMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n totalBorrowsUSD: _reserve.totalBorrowsUSD.toString(),\n totalLiquidity: normalizeWithReserve(_reserve.totalLiquidity),\n totalStableDebt: normalizeWithReserve(_reserve.totalStableDebt),\n totalVariableDebt: normalizeWithReserve(_reserve.totalVariableDebt),\n stableBorrowAPR: normalize(userReserve.stableBorrowRate, RAY_DECIMALS),\n stableBorrowAPY: normalize(exactStableBorrowRate, RAY_DECIMALS),\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { BigNumberValue } from '../../bignumber';\nimport {\n calculateAvailableBorrowsMarketReferenceCurrency,\n calculateHealthFactorFromBalances,\n} from '../../pool-math';\nimport { calculateUserReserveTotals } from './calculate-user-reserve-totals';\nimport { UserReserveSummaryResponse } from './generate-user-reserve-summary';\n\nexport interface RawUserSummaryRequest {\n userReserves: UserReserveSummaryResponse[];\n marketRefPriceInUsd: BigNumberValue;\n marketRefCurrencyDecimals: number;\n}\n\nexport interface RawUserSummaryResponse {\n totalLiquidityUSD: BigNumber;\n totalCollateralUSD: BigNumber;\n totalBorrowsUSD: BigNumber;\n totalLiquidityMarketReferenceCurrency: BigNumber;\n totalCollateralMarketReferenceCurrency: BigNumber;\n totalBorrowsMarketReferenceCurrency: BigNumber;\n availableBorrowsMarketReferenceCurrency: BigNumber;\n availableBorrowsUSD: BigNumber;\n currentLoanToValue: BigNumber;\n currentLiquidationThreshold: BigNumber;\n healthFactor: BigNumber;\n}\n\nfunction convertToUsd(\n value: BigNumber,\n marketRefPriceInUsd: BigNumberValue,\n marketRefCurrencyDecimals: number,\n): BigNumber {\n return value\n .multipliedBy(marketRefPriceInUsd)\n .shiftedBy(marketRefCurrencyDecimals * -1);\n}\n\nexport function generateRawUserSummary({\n userReserves,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n}: RawUserSummaryRequest): RawUserSummaryResponse {\n const {\n totalLiquidityMarketReferenceCurrency,\n totalBorrowsMarketReferenceCurrency,\n totalCollateralMarketReferenceCurrency,\n currentLtv,\n currentLiquidationThreshold,\n } = calculateUserReserveTotals({ userReserves });\n\n const availableBorrowsMarketReferenceCurrency =\n calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency:\n totalCollateralMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency: totalBorrowsMarketReferenceCurrency,\n currentLtv,\n });\n\n return {\n totalLiquidityUSD: convertToUsd(\n totalLiquidityMarketReferenceCurrency,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n ),\n totalCollateralUSD: convertToUsd(\n totalCollateralMarketReferenceCurrency,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n ),\n totalBorrowsUSD: convertToUsd(\n totalBorrowsMarketReferenceCurrency,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n ),\n totalLiquidityMarketReferenceCurrency,\n totalCollateralMarketReferenceCurrency,\n totalBorrowsMarketReferenceCurrency,\n availableBorrowsMarketReferenceCurrency,\n availableBorrowsUSD: convertToUsd(\n availableBorrowsMarketReferenceCurrency,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n ),\n currentLoanToValue: currentLtv,\n currentLiquidationThreshold,\n healthFactor: calculateHealthFactorFromBalances({\n collateralBalanceMarketReferenceCurrency:\n totalCollateralMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency: totalBorrowsMarketReferenceCurrency,\n currentLiquidationThreshold,\n }),\n };\n}\n","import BigNumber from 'bignumber.js';\nimport { BigNumberValue } from '../../bignumber';\nimport {\n getLinearBalance,\n getMarketReferenceCurrencyAndUsdBalance,\n getCompoundedBalance,\n getCompoundedStableBalance,\n} from '../../pool-math';\nimport { calculateSupplies } from './calculate-supplies';\nimport { RawUserReserveData } from './index';\n\nexport interface UserReserveSummaryRequest {\n userReserve: RawUserReserveData;\n marketRefPriceInUsd: BigNumberValue;\n marketRefCurrencyDecimals: number;\n currentTimestamp: number;\n}\n\nexport interface UserReserveSummaryResponse {\n userReserve: RawUserReserveData;\n underlyingBalance: BigNumber;\n underlyingBalanceMarketReferenceCurrency: BigNumber;\n underlyingBalanceUSD: BigNumber;\n variableBorrows: BigNumber;\n variableBorrowsMarketReferenceCurrency: BigNumber;\n variableBorrowsUSD: BigNumber;\n stableBorrows: BigNumber;\n stableBorrowsMarketReferenceCurrency: BigNumber;\n stableBorrowsUSD: BigNumber;\n totalBorrows: BigNumber;\n totalBorrowsMarketReferenceCurrency: BigNumber;\n totalBorrowsUSD: BigNumber;\n totalLiquidity: BigNumber;\n totalStableDebt: BigNumber;\n totalVariableDebt: BigNumber;\n}\n\nexport function generateUserReserveSummary({\n userReserve,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n currentTimestamp,\n}: UserReserveSummaryRequest): UserReserveSummaryResponse {\n const poolReserve = userReserve.reserve;\n const { priceInMarketReferenceCurrency, decimals } = poolReserve;\n const underlyingBalance = getLinearBalance({\n balance: userReserve.scaledSTokenBalance,\n index: poolReserve.liquidityIndex,\n rate: poolReserve.liquidityRate,\n lastUpdateTimestamp: poolReserve.lastUpdateTimestamp,\n currentTimestamp,\n });\n const {\n marketReferenceCurrencyBalance: underlyingBalanceMarketReferenceCurrency,\n usdBalance: underlyingBalanceUSD,\n } = getMarketReferenceCurrencyAndUsdBalance({\n balance: underlyingBalance,\n priceInMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n decimals,\n marketRefPriceInUsd,\n });\n\n const variableBorrows = getCompoundedBalance({\n principalBalance: userReserve.scaledVariableDebt,\n reserveIndex: poolReserve.variableBorrowIndex,\n reserveRate: poolReserve.variableBorrowRate,\n lastUpdateTimestamp: poolReserve.lastUpdateTimestamp,\n currentTimestamp,\n });\n\n const {\n marketReferenceCurrencyBalance: variableBorrowsMarketReferenceCurrency,\n usdBalance: variableBorrowsUSD,\n } = getMarketReferenceCurrencyAndUsdBalance({\n balance: variableBorrows,\n priceInMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n decimals,\n marketRefPriceInUsd,\n });\n\n const stableBorrows = getCompoundedStableBalance({\n principalBalance: userReserve.principalStableDebt,\n userStableRate: userReserve.stableBorrowRate,\n lastUpdateTimestamp: userReserve.stableBorrowLastUpdateTimestamp,\n currentTimestamp,\n });\n\n const {\n marketReferenceCurrencyBalance: stableBorrowsMarketReferenceCurrency,\n usdBalance: stableBorrowsUSD,\n } = getMarketReferenceCurrencyAndUsdBalance({\n balance: stableBorrows,\n priceInMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n decimals,\n marketRefPriceInUsd,\n });\n\n const { totalLiquidity, totalStableDebt, totalVariableDebt } =\n calculateSupplies({\n reserve: {\n totalScaledVariableDebt: poolReserve.totalScaledVariableDebt,\n variableBorrowIndex: poolReserve.variableBorrowIndex,\n variableBorrowRate: poolReserve.variableBorrowRate,\n totalPrincipalStableDebt: poolReserve.totalPrincipalStableDebt,\n averageStableRate: poolReserve.averageStableRate,\n availableLiquidity: poolReserve.availableLiquidity,\n stableDebtLastUpdateTimestamp:\n poolReserve.stableDebtLastUpdateTimestamp,\n lastUpdateTimestamp: poolReserve.lastUpdateTimestamp,\n },\n currentTimestamp,\n });\n\n return {\n userReserve,\n underlyingBalance,\n underlyingBalanceMarketReferenceCurrency,\n underlyingBalanceUSD,\n variableBorrows,\n variableBorrowsMarketReferenceCurrency,\n variableBorrowsUSD,\n stableBorrows,\n stableBorrowsMarketReferenceCurrency,\n stableBorrowsUSD,\n totalBorrows: variableBorrows.plus(stableBorrows),\n totalBorrowsMarketReferenceCurrency:\n variableBorrowsMarketReferenceCurrency.plus(\n stableBorrowsMarketReferenceCurrency,\n ),\n totalBorrowsUSD: variableBorrowsUSD.plus(stableBorrowsUSD),\n totalLiquidity,\n totalStableDebt,\n totalVariableDebt,\n };\n}\n","import { BigNumberValue, normalize } from '../../bignumber';\nimport { LTV_PRECISION } from '../../constants';\nimport { formatUserReserve } from './format-user-reserve';\nimport { generateRawUserSummary } from './generate-raw-user-summary';\nimport {\n generateUserReserveSummary,\n UserReserveSummaryResponse,\n} from './generate-user-reserve-summary';\n\nexport interface RawReserveData {\n decimals: number;\n reserveFactor: string;\n baseLTVasCollateral: string;\n averageStableRate: string;\n stableDebtLastUpdateTimestamp: number;\n liquidityIndex: string;\n reserveLiquidationThreshold: string;\n reserveLiquidationBonus: string;\n variableBorrowIndex: string;\n variableBorrowRate: string;\n availableLiquidity: string;\n stableBorrowRate: string;\n liquidityRate: string;\n totalPrincipalStableDebt: string;\n totalScaledVariableDebt: string;\n lastUpdateTimestamp: number;\n priceInMarketReferenceCurrency: string;\n id: string;\n symbol: string;\n usageAsCollateralEnabled: boolean;\n underlyingAsset: string;\n name: string;\n}\n\nexport interface RawUserReserveData {\n reserve: RawReserveData;\n scaledSTokenBalance: string;\n usageAsCollateralEnabledOnUser: boolean;\n stableBorrowRate: string;\n scaledVariableDebt: string;\n principalStableDebt: string;\n stableBorrowLastUpdateTimestamp: number;\n}\n\nexport interface ComputedUserReserve extends RawUserReserveData {\n underlyingBalance: string;\n underlyingBalanceMarketReferenceCurrency: string;\n underlyingBalanceUSD: string;\n variableBorrows: string;\n variableBorrowsMarketReferenceCurrency: string;\n variableBorrowsUSD: string;\n stableBorrows: string;\n stableBorrowsMarketReferenceCurrency: string;\n stableBorrowsUSD: string;\n totalBorrows: string;\n totalBorrowsMarketReferenceCurrency: string;\n totalBorrowsUSD: string;\n totalLiquidity: string;\n totalStableDebt: string;\n totalVariableDebt: string;\n stableBorrowAPY: string;\n stableBorrowAPR: string;\n}\n\nexport interface FormatUserSummaryRequest {\n rawUserReserves: RawUserReserveData[];\n marketRefPriceInUsd: BigNumberValue;\n marketRefCurrencyDecimals: number;\n currentTimestamp: number;\n}\n\nexport interface FormatUserSummaryResponse {\n userReservesData: ComputedUserReserve[];\n totalLiquidityMarketReferenceCurrency: string;\n totalLiquidityUSD: string;\n totalCollateralMarketReferenceCurrency: string;\n totalCollateralUSD: string;\n totalBorrowsMarketReferenceCurrency: string;\n totalBorrowsUSD: string;\n availableBorrowsMarketReferenceCurrency: string;\n availableBorrowsUSD: string;\n currentLoanToValue: string;\n currentLiquidationThreshold: string;\n healthFactor: string;\n}\n\nexport function formatUserSummary({\n currentTimestamp,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n rawUserReserves,\n}: FormatUserSummaryRequest): FormatUserSummaryResponse {\n const computedUserReserves: UserReserveSummaryResponse[] =\n rawUserReserves.map(userReserve =>\n generateUserReserveSummary({\n userReserve,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n currentTimestamp,\n }),\n );\n\n const formattedUserReserves = computedUserReserves.map(computedUserReserve =>\n formatUserReserve({\n reserve: computedUserReserve,\n marketRefCurrencyDecimals,\n }),\n );\n\n const userData = generateRawUserSummary({\n userReserves: computedUserReserves,\n marketRefPriceInUsd,\n marketRefCurrencyDecimals,\n });\n\n return {\n userReservesData: formattedUserReserves,\n totalLiquidityMarketReferenceCurrency: normalize(\n userData.totalLiquidityMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n totalLiquidityUSD: userData.totalLiquidityUSD.toString(),\n totalCollateralMarketReferenceCurrency: normalize(\n userData.totalCollateralMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n totalCollateralUSD: userData.totalCollateralUSD.toString(),\n totalBorrowsMarketReferenceCurrency: normalize(\n userData.totalBorrowsMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n totalBorrowsUSD: userData.totalBorrowsUSD.toString(),\n availableBorrowsMarketReferenceCurrency: normalize(\n userData.availableBorrowsMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n ),\n availableBorrowsUSD: userData.availableBorrowsUSD.toString(),\n currentLoanToValue: normalize(userData.currentLoanToValue, LTV_PRECISION),\n currentLiquidationThreshold: normalize(\n userData.currentLiquidationThreshold,\n LTV_PRECISION,\n ),\n healthFactor: userData.healthFactor.toFixed(),\n };\n}\n","export * from './bignumber';\nexport * from './constants';\nexport * from './ray.math';\nexport * from './pool-math';\nexport * from './formatters/user';\nexport * from './formatters/reserve';\nexport * from './formatters/incentive';\nexport * from './formatters/usd/native-to-usd';\n","import BigNumber from 'bignumber.js';\nimport {\n BigNumberValue,\n valueToBigNumber,\n valueToZDBigNumber,\n} from './bignumber';\nimport { SECONDS_PER_YEAR, LTV_PRECISION } from './constants';\nimport * as RayMath from './ray.math';\n\ninterface CalculateCompoundedInterestRequest {\n rate: BigNumberValue;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateCompoundedInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: CalculateCompoundedInterestRequest): BigNumber {\n const timeDelta = valueToZDBigNumber(currentTimestamp - lastUpdateTimestamp);\n const ratePerSecond = valueToZDBigNumber(rate).dividedBy(SECONDS_PER_YEAR);\n return RayMath.binomialApproximatedRayPow(ratePerSecond, timeDelta);\n}\n\ninterface CompoundedBalanceRequest {\n principalBalance: BigNumberValue;\n reserveIndex: BigNumberValue;\n reserveRate: BigNumberValue;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\n\nexport function getCompoundedBalance({\n principalBalance: _principalBalance,\n reserveIndex,\n reserveRate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CompoundedBalanceRequest): BigNumber {\n const principalBalance = valueToZDBigNumber(_principalBalance);\n if (principalBalance.eq('0')) {\n return principalBalance;\n }\n\n const compoundedInterest = calculateCompoundedInterest({\n rate: reserveRate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n const cumulatedInterest = RayMath.rayMul(compoundedInterest, reserveIndex);\n const principalBalanceRay = RayMath.wadToRay(principalBalance);\n\n return RayMath.rayToWad(\n RayMath.rayMul(principalBalanceRay, cumulatedInterest),\n );\n}\n\ninterface LinearInterestRequest {\n rate: BigNumberValue;\n currentTimestamp: number;\n lastUpdateTimestamp: number;\n}\n\nexport function calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n}: LinearInterestRequest): BigNumber {\n const timeDelta = RayMath.wadToRay(\n valueToZDBigNumber(currentTimestamp - lastUpdateTimestamp),\n );\n const timeDeltaInSeconds = RayMath.rayDiv(\n timeDelta,\n RayMath.wadToRay(SECONDS_PER_YEAR),\n );\n const a = RayMath.rayMul(rate, timeDeltaInSeconds).plus(RayMath.RAY);\n return a;\n}\n\ninterface ReserveNormalizedIncomeRequest {\n rate: BigNumberValue;\n index: BigNumberValue;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getReserveNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n}: ReserveNormalizedIncomeRequest): BigNumber {\n if (valueToZDBigNumber(rate).eq('0')) {\n return valueToZDBigNumber(index);\n }\n\n const cumulatedInterest = calculateLinearInterest({\n rate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n\n return RayMath.rayMul(cumulatedInterest, index);\n}\n\ninterface LinearBalanceRequest {\n balance: BigNumberValue;\n index: BigNumberValue;\n rate: BigNumberValue;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\nexport function getLinearBalance({\n balance,\n index,\n rate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: LinearBalanceRequest) {\n return RayMath.rayToWad(\n RayMath.rayMul(\n RayMath.wadToRay(balance),\n getReserveNormalizedIncome({\n rate,\n index,\n lastUpdateTimestamp,\n currentTimestamp,\n }),\n ),\n );\n}\n\ninterface CompoundedStableBalanceRequest {\n principalBalance: BigNumberValue;\n userStableRate: BigNumberValue;\n lastUpdateTimestamp: number;\n currentTimestamp: number;\n}\n\nexport function getCompoundedStableBalance({\n principalBalance: _principalBalance,\n userStableRate,\n lastUpdateTimestamp,\n currentTimestamp,\n}: CompoundedStableBalanceRequest): BigNumber {\n const principalBalance = valueToZDBigNumber(_principalBalance);\n if (principalBalance.eq('0')) {\n return principalBalance;\n }\n\n const cumulatedInterest = calculateCompoundedInterest({\n rate: userStableRate,\n currentTimestamp,\n lastUpdateTimestamp,\n });\n const principalBalanceRay = RayMath.wadToRay(principalBalance);\n\n return RayMath.rayToWad(\n RayMath.rayMul(principalBalanceRay, cumulatedInterest),\n );\n}\n\ninterface HealthFactorFromBalanceRequest {\n collateralBalanceMarketReferenceCurrency: BigNumberValue;\n borrowBalanceMarketReferenceCurrency: BigNumberValue;\n currentLiquidationThreshold: BigNumberValue;\n}\n\nexport function calculateHealthFactorFromBalances({\n borrowBalanceMarketReferenceCurrency,\n collateralBalanceMarketReferenceCurrency,\n currentLiquidationThreshold,\n}: HealthFactorFromBalanceRequest): BigNumber {\n if (valueToBigNumber(borrowBalanceMarketReferenceCurrency).eq(0)) {\n return valueToBigNumber('-1'); // Invalid number\n }\n\n return valueToBigNumber(collateralBalanceMarketReferenceCurrency)\n .multipliedBy(currentLiquidationThreshold)\n .shiftedBy(LTV_PRECISION * -1)\n .div(borrowBalanceMarketReferenceCurrency);\n}\n\ninterface HealthFactorFromBalanceBigUnitsRequest {\n collateralBalanceMarketReferenceCurrency: BigNumberValue;\n borrowBalanceMarketReferenceCurrency: BigNumberValue;\n currentLiquidationThreshold: BigNumberValue;\n}\nexport function calculateHealthFactorFromBalancesBigUnits({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLiquidationThreshold,\n}: HealthFactorFromBalanceBigUnitsRequest): BigNumber {\n return calculateHealthFactorFromBalances({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLiquidationThreshold: valueToBigNumber(currentLiquidationThreshold)\n .shiftedBy(LTV_PRECISION)\n .decimalPlaces(0, BigNumber.ROUND_DOWN),\n });\n}\n\ninterface AvailableBorrowsMarketReferenceCurrencyRequest {\n collateralBalanceMarketReferenceCurrency: BigNumberValue;\n borrowBalanceMarketReferenceCurrency: BigNumberValue;\n currentLtv: BigNumberValue;\n}\n\nexport function calculateAvailableBorrowsMarketReferenceCurrency({\n collateralBalanceMarketReferenceCurrency,\n borrowBalanceMarketReferenceCurrency,\n currentLtv,\n}: AvailableBorrowsMarketReferenceCurrencyRequest): BigNumber {\n if (valueToZDBigNumber(currentLtv).eq(0)) {\n return valueToZDBigNumber('0');\n }\n\n const availableBorrowsMarketReferenceCurrency = valueToZDBigNumber(\n collateralBalanceMarketReferenceCurrency,\n )\n .multipliedBy(currentLtv)\n .shiftedBy(LTV_PRECISION * -1)\n .minus(borrowBalanceMarketReferenceCurrency);\n return availableBorrowsMarketReferenceCurrency.gt('0')\n ? availableBorrowsMarketReferenceCurrency\n : valueToZDBigNumber('0');\n}\n\ninterface MarketReferenceCurrencyAndUsdBalanceRequest {\n balance: BigNumberValue;\n priceInMarketReferenceCurrency: BigNumberValue;\n marketRefCurrencyDecimals: number;\n decimals: number;\n marketRefPriceInUsd: BigNumberValue;\n}\n\ninterface MarketReferenceAndUsdBalanceResponse {\n marketReferenceCurrencyBalance: BigNumber;\n usdBalance: BigNumber;\n}\n/**\n * @returns non humanized/normalized values for usd/marketReference\n */\nexport function getMarketReferenceCurrencyAndUsdBalance({\n balance,\n priceInMarketReferenceCurrency,\n marketRefCurrencyDecimals,\n decimals,\n marketRefPriceInUsd,\n}: MarketReferenceCurrencyAndUsdBalanceRequest): MarketReferenceAndUsdBalanceResponse {\n const marketReferenceCurrencyBalance = valueToZDBigNumber(balance)\n .multipliedBy(priceInMarketReferenceCurrency)\n .shiftedBy(decimals * -1);\n const usdBalance = marketReferenceCurrencyBalance\n .multipliedBy(marketRefPriceInUsd)\n .shiftedBy(marketRefCurrencyDecimals * -1);\n return { marketReferenceCurrencyBalance, usdBalance };\n}\n","import BigNumber from 'bignumber.js';\nimport { BigNumberValue, valueToZDBigNumber } from './bignumber';\n\nexport const WAD = valueToZDBigNumber(10).pow(18);\nexport const HALF_WAD = WAD.dividedBy(2);\n\nexport const RAY = valueToZDBigNumber(10).pow(27);\nexport const HALF_RAY = RAY.dividedBy(2);\n\nexport const WAD_RAY_RATIO = valueToZDBigNumber(10).pow(9);\n\nexport function rayMul(a: BigNumberValue, b: BigNumberValue): BigNumber {\n return HALF_RAY.plus(valueToZDBigNumber(a).multipliedBy(b)).div(RAY);\n}\n\nexport function rayDiv(a: BigNumberValue, b: BigNumberValue): BigNumber {\n const halfB = valueToZDBigNumber(b).div(2);\n\n return halfB.plus(valueToZDBigNumber(a).multipliedBy(RAY)).div(b);\n}\n\nexport function rayToWad(a: BigNumberValue): BigNumber {\n const halfRatio = valueToZDBigNumber(WAD_RAY_RATIO).div(2);\n\n return halfRatio.plus(a).div(WAD_RAY_RATIO);\n}\n\nexport function wadToRay(a: BigNumberValue): BigNumber {\n return valueToZDBigNumber(a).multipliedBy(WAD_RAY_RATIO).decimalPlaces(0);\n}\n\nexport function rayPow(a: BigNumberValue, p: BigNumberValue): BigNumber {\n let x = valueToZDBigNumber(a);\n let n = valueToZDBigNumber(p);\n let z = n.modulo(2).eq(0) ? valueToZDBigNumber(RAY) : x;\n\n for (n = n.div(2); !n.eq(0); n = n.div(2)) {\n x = rayMul(x, x);\n\n if (!n.modulo(2).eq(0)) {\n z = rayMul(z, x);\n }\n }\n\n return z;\n}\n\n/**\n * RayPow is slow and gas intensive therefore in v2 we switched to binomial approximation on the contract level.\n * While the results ar not exact to the last decimal, they are close enough.\n */\nexport function binomialApproximatedRayPow(\n a: BigNumberValue,\n p: BigNumberValue,\n): BigNumber {\n const base = valueToZDBigNumber(a);\n const exp = valueToZDBigNumber(p);\n if (exp.eq(0)) return RAY;\n const expMinusOne = exp.minus(1);\n const expMinusTwo = exp.gt(2) ? exp.minus(2) : 0;\n\n const basePowerTwo = rayMul(base, base);\n const basePowerThree = rayMul(basePowerTwo, base);\n\n const firstTerm = exp.multipliedBy(base);\n const secondTerm = exp\n .multipliedBy(expMinusOne)\n .multipliedBy(basePowerTwo)\n .div(2);\n const thirdTerm = exp\n .multipliedBy(expMinusOne)\n .multipliedBy(expMinusTwo)\n .multipliedBy(basePowerThree)\n .div(6);\n\n return RAY.plus(firstTerm).plus(secondTerm).plus(thirdTerm);\n}\n","var map = {\n\t\"./en/messages.po\": [\n\t\t52314,\n\t\t314\n\t],\n\t\"./id/messages.po\": [\n\t\t94797,\n\t\t797\n\t],\n\t\"./ja/messages.po\": [\n\t\t88479,\n\t\t479\n\t],\n\t\"./ko/messages.po\": [\n\t\t54945,\n\t\t945\n\t],\n\t\"./ru/messages.po\": [\n\t\t47970,\n\t\t970\n\t],\n\t\"./tr/messages.po\": [\n\t\t27619,\n\t\t619\n\t],\n\t\"./vi/messages.po\": [\n\t\t65544,\n\t\t544\n\t],\n\t\"./zh/messages.po\": [\n\t\t78727,\n\t\t727\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 1 | 16);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 69343;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"19\":\"19c634cb\",\"214\":\"e64bd0d2\",\"314\":\"355b23a6\",\"479\":\"3247dba7\",\"509\":\"bf36014f\",\"544\":\"eaaba701\",\"619\":\"94d6d90a\",\"661\":\"169fa1ed\",\"723\":\"1246942d\",\"727\":\"9ede8156\",\"787\":\"cda612ba\",\"797\":\"fff085d2\",\"852\":\"19f345df\",\"857\":\"d5ddf7c3\",\"945\":\"172c1133\",\"970\":\"e7d51c35\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"19\":\"a3771c59\",\"214\":\"42f441da\",\"661\":\"3df409d4\",\"852\":\"392805db\",\"857\":\"35ff9edd\"}[chunkId] + \".chunk.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkfrontend\"] = self[\"webpackChunkfrontend\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [348,736], function() { return __webpack_require__(76581); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","_path","_excluded","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgIconSetting","_ref","svgRef","title","titleId","props","width","height","viewBox","fill","xmlns","ref","id","d","ForwardRef","linkList","onAddTokensClick","useState","visible","setVisible","location","useLocation","navigatePush","useNavigate","useAppSetting","settingData","changeTheme","changeLanguage","onClose","menu","onClick","e","defaultSelectedKeys","language","items","languageDict","map","label","className","CloseOutlined","placement","style","top","closable","link","isActive","pathname","includes","path","clickLinkItem","checked","theme","onChange","overlay","DownOutlined","type","useWallet","account","chainId","disconnect","activeWalletType","responsive","useResponsive","name","getNetworkConfig","copy","navigator","clipboard","writeText","message","src","require","alt","shortenAddress","trigger","getPopupContainer","parentElement","document","body","lg","handleChangeTheme","handleLanguageClick","onVisibleChange","flag","routes","useRoutesArr","connect","loading","setLoading","scrollBackground","setScrollBackground","data","useMarketData","useEffect","window","addEventListener","onScroll","removeEventListener","scrollTop","documentElement","connectWallet","useCallback","catch","assets","forEach","item","addERC20TokenToMetamask","displaySymbol","symbol","underlyingAsset","decimals","sTokenAddress","onAddSio2Click","rewardToken","ASSETS_DICT","filter","isTopHeader","cursor","href","md","SIO2_PRICE","QuestionCircleOutlined","SettingDropDown","getColumnWidth","columns","len","defaultArr","reduce","preV","parseInt","join","dataSource","rowClick","stateMessage","disabledKey","sortType","setSortType","setData","user","useUserData","sortTable","column","dealData","value","render","dataIndex","replace","isNaN","Number","toString","data_","sort","a","b","valueA","valueB","gridTemplateColumns","index","sortType_","handleSort","tooltip","content","InfoCircleOutlined","CaretUpOutlined","CaretDownOutlined","depositData","balanceByAsset","isDisabled","text","renderTextDom","list","noShow","isHide","setIsHide","sm","pagination","simple","pageSize","current","page","total","totalCount","changePagination","imgSrc","titleDom","img","LISTED_ASSET_SYMBOLS","SYMBOL_ORDER","res","idx","ASTR","icon","SymbolAstr","WETH","SymbolWeth","WBTC","SymbolWbtc","SDN","SymbolWsdn","USDC","SymbolUsdc","USDT","SymbolUsdt","DAI","SymbolDai","BUSD","SymbolBusd","BNB","SymbolBnb","MATIC","SymbolMatic","ARSW","SymbolArsw","borrowUnsupported","SiO2","SymbolSio2","SBY","WASTR","SymbolWastr","BAI","SymbolBai","WBNB","SymbolWbnb","DOT","SymbolWdot","WDOT","NSBY","SymbolNastr","nASTR","ASSETS","values","WSDN","GAS_ESTIMATOR_POLL_INTERVAL","DEFAULT_GAS_PRICE","MIN","BigNumber","MAX","DEV_CHAIN","CHAIN_ID","PUBLIC_SALE_TOTAL_RASIED","PUBLIC_SALE_PRICE","zh","en","vi","ko","tr","ja","ru","defaultSetting","useSWRImmutable","getSettingStorage","mutateAppSetting","mutate","changeSetting","setSettingStorage","newSettingData","loadSync","error","imageTypes","LoadingOutlined","warning","ExclamationOutlined","submitted","ArrowUpOutlined","success","CheckOutlined","cancel","MESSAGE_TYPES_WITH_DURATION","useModalContext","messageData","setMessageVisible","messageVisible","setTimeout","close","wrapClassName","footer","onCancel","useLendingPool","signer","provider","useStaticRPCProvider","LendingPool","getMarketConfig","addresses","lendingPoolContract","lendingPool","LEVERAGER","leveragerAddress","Leverager","leveragerContract","leverager","handleTx","useTxHandler","deposit","param","Error","reserve","amount","withdraw","all","borrow","interestRateMode","InterestRate","debtTokenAddress","vdTokenAddress","onSucceeded","repay","repayAmount","equals","BASE_ASSET_DUMMY_ADDRESS","times","setUsageAsCollateral","usageAsCollateral","reserveAddress","loop","debtToken","borrowRatio","toFixed","loopCount","baseAsset","wrapperAddress","withdrawUnavailableReason","deposited","unusedCollateral","liquidity","healthFactor","gt","gte","borrowUnavailableReason","currentBorrowable","isPositive","lt","unusedCollateralOnWithdraw","BN_ZERO","asset","userSummary","userAssetBalance","usageAsCollateralEnabled","totalBorrowedInMarketReferenceCurrency","isZero","valueToBigNumber","Infinity","excessHF","minus","multipliedBy","div","reserveLiquidationThreshold","plus","dividedBy","priceInMarketReferenceCurrency","calcBorrowLimitUsed","borrowLimitInUSD","totalBorrowed","defaultValue","calcLiquidationThreshold","delta","collateral","threshold","calculateHealthFactor","result","calculateHealthFactorFromBalances","collateralBalanceMarketReferenceCurrency","normalizeBN","totalCollateralInMarketReferenceCurrency","marketReferenceCurrencyDecimals","borrowBalanceMarketReferenceCurrency","currentLiquidationThreshold","liquidationThreshold","LTV_PRECISION","validEstimationInput","SvgIconArrowRight","transform","after","formatAfter","createTrackedData","eventType","assetSymbol","marketReferenceCurrencyPriceInUSD","valueInUSD","convertToUSD","sendEventData","trackedData","dataLayer","push","event","underlying_asset","value_in_usd","dp","toNumber","useTracking","marketData","assetFromUnderlyingAsset","find","withTracking","fn","BN_ONE","args","closeModal","contentVisible","balance","useWalletBalance","activeTab","setActiveTab","borrowingAmount","setBorrowingAmount","repaymentAmount","setRepaymentAmount","reset","summary","inWallet","variableBorrowAPY","variableBorrowIncentiveAPR","borrowingEnabled","isFrozen","totalBorrowedInUSD","borrowLimitUsed","borrowed","borrowable","borrowingAmountBn","formattedToBigNumber","repaymentAmountBn","estimation","currentBorrowableInUSD","availableBorrowsInUSD","currentBorrowedInUSD","currentBorrowedInMarketReferenceCurrency","convertFromUSD","maxAmount","unavailableReason","amountInMarketReferenceCurrency","estimateBorrow","currentBorrowed","normalize","undefined","estimateRepayment","borrowWithTracking","repayWithTracking","options","disabled","block","allowClear","placeholder","suffix","formatAmt","decimalPlaces","roundingMode","formatPct","formatUSD","formatAmtShort","shorteningThreshold","depositAmount","setDepositAmount","withdrawalAmount","setWithdrawalAmount","depositAPY","depositIncentiveAPR","depositAmountBn","withdrawalAmountBn","baseLTVasCollateral","currentCollateralInMarketReferenceCurrency","ltvInUSD","estimateDeposit","params","currentLimit","negated","estimateWithdrawal","depositWithTracking","withdrawWithTracking","isShowTip","Link","estimateUsageAsCollateral","totalCollateralInUSD","assetCollateralInUSD","setAmount","children","WrapComponent","Drawer","wrapProps","Modal","direction","size","SymbolWalletPolkadot","SymbolWalletTalisman","SymbolWalletSubWallet","ModalContext","createContext","ModalContextProvider","setMessageData","setContentVisible","setArgs","switchChain","isUnsupportedChain","useMemo","isSupportedChain","openMessage","handleUnSupportChain","DEFAULT_CHAIN_ID","then","Provider","openContent","CollateralModal","PurchaseModal","context","useContext","SECRET_KEY","SECRET_VALUE","useSearchParams","searchParams","navigate","useOriginNavigate","url","secret","get","hostname","HomePage","React","MarketsPage","StakingPage","PublicSalePage","FaucetPage","baseRoutes","element","isShowWithoutChain","devRoutes","isDev","getGasPriceByChainId","network","fetch","method","redirect","response","ok","Promise","reject","status","statusText","json","estimatedGasPriceResponse","maxFeePerGas","eip1559","maxPriorityFeePerGas","mutateMarketData","mutateUserData","mutateWalletBalance","mutateStakeInfoPage","useStakeInfoPage","mutateStakeData","useStakeData","estimatedGasPrice","useSWR","refreshInterval","fallback","txs","gasPrice","pickLendingPoolTxs","actionTx","erc20ApprovalTx","debtErc20ApprovalTx","tx","sendTransaction","approveRes","wait","depositRes","serializeError","code","msg_","originalError","msg","match","prev","txType","eEthereumTxType","EMPTY_INCENTIVE","sIncentives","incentiveAPR","rewardTokenAddress","vdIncentives","sdIncentives","toAssetMarketData","incentive","convertToUSDBulk","availableLiquidity","totalLiquidity","totalVariableDebt","totalStableDebt","liquidityInUSD","totalDepositedInUSD","assetFromSymbol","toLowerCase","supplyAPY","reserveFactor","liquidationPenalty","reserveLiquidationBonus","variableDebtTokenAddress","usePoolDataProvider","sio2PriceInUSD","_key","getMarketData","dedupingInterval","currentTimestamp","dayjs","unix","getReservesWithIncentives","address","priceInUSD","reservesData","incentivesByUnderlyingAsset","rawData","onlyListed","marketTimestamp","getPoolDataProvider","SECONDS_PER_MONTH","valueToZDBigNumber","BN_DECIMAL_PRECISION","stakeUiHelperContract","StakeUiHelperWrapper","new","proivder","getUserUIDataHumanized","computeStakeData","stakeUiHelper","StakeUiHelper","stakeUiHelperAddress","getDistributionPerSecond","intialSupply","inflactionStart","decayRatio","currentTime","Date","parse","curSpan","exponentiatedBy","stakeTokenTotalSupply","stakeCooldownSeconds","stakeUnstakeWindow","stakeTokenPriceEth","rewardTokenPriceEth","stakeApy","stakeTokenUserBalance","underlyingTokenUserBalance","userCooldown","userIncentivesToClaim","userPermitNonce","distributionPerDay","userCooldownEndTime","userEarningsPerDay","ORGIN_PAGINATION","allPageSize","EMPTY_STAKE_DATA","EMPTY_STAKE_PAGE","pageSt","pageInfo","useStakeUiHelper","_chainId","getUnclaimedBalance","fallbackData","useStakeInfo","stakenContract","pageSz","getStakeInfoPage","getStateInfosByPage","veToken","Math","pow","mode","useStakeInfoSize","getStakeInfoSz","getStakeInfoSize","getProvider","config","privateJsonRPCUrl","ethers","chainProviders","publicJsonRPCUrl","rpc","currentChainId","getUserData","getUserReservesWithIncentive","rawReservesData","baseCurrencyData","rawBaseCurrencyData","reserveIncentivesData","rawReserveIncentivesData","timestamp","reserves","toUser","userReserves","totalLiquidityUSD","totalBorrowsUSD","availableBorrowsUSD","toBalanceByAsset","userReservesData","netAPY","calculateNetAPY","totalBorrowsMarketReferenceCurrency","totalCollateralMarketReferenceCurrency","rewards","userReserve","underlyingBalance","totalBorrows","usageAsCollateralEnabledOnUser","EMPTY_BALANCE_BY_ASSET","getChainInfo","CHIAN_INFO","toChainIdHex","chainName","NETWORK_CONFIG","nativeCurrency","rpcUrls","blockExplorerUrls","explorerLinks","useActiveWallet","triedToConnectToSafe","useSafeAppConnection","safeMultisigConnector","useWeb3React","library","active","activate","deactivate","getSigner","activeWallet","mutateActiveWallet","getConnector","connector","onConnect","onDisconnect","metamask","checkSafeContext","walletBalanceProviderContract","WalletBalanceProviderWrapper","lendingPoolAddressProvider","getBeforeNormalizedWalletBalance","getUserWalletBalancesForLendingPoolProvider","underlyingAssets","balances","getBalance","token","balanceOf","walletBalanceProvider","LENDING_POOL_ADDRESS_PROVIDER","WalletBalanceProvider","walletBalanceProviderAddress","EMPTY_WALLET_BALANCE","generateSymbolDict","useWalletBalanceProvider","getWalletBalance","balancesDict","rewardBalance","_g","SvgFooterPeck","xmlnsXlink","stroke","strokeWidth","fillRule","points","SvgFooterAstar","opacity","mixBlendMode","isolation","rel","configResponsive","xs","xl","useRoutes","routeConDom","tip","ConfigProvider","primaryColor","prefixCls","MissNetwork","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","container","getElementById","createRoot","Web3ReactProvider","getLibrary","reportWebVitals","CUSTOM_MARKET","SHIBUYA_CONFIG","enabledFeatures","incentives","INCENTIVES_CONTROLLER","LENDING_POOL","WETH_GATEWAY","MARKET_CONFIGS","CHAIN_MARKET_CONFIG","proto_astar","proto_shibuya","proto_dev","astarStakeConfig","stakeDataProvider","tokens","Stake","TOKEN_STAKING","STAKING_REWARD_TOKEN","STAKING_HELPER","queryStakeDataUrl","wsStakeDataUrl","shibuyaStakeConfig","devStakeConfig","STAKE_CONFIG","faucetConfig","getStakeConfig","getFauctConfig","astar","shibuya","dev","arg","uiPoolDataProvider","uiIncentiveDataProvider","priceAggregatorAdapterAddress","snapshotProvider","endpoint","apiKey","arthswapDataProvider","SUPPORTED_LOCALES","MESSAGES","messagesEn","messagesZh","messagesVi","messagesKo","messagesTr","messagesId","messagesJa","messagesRu","I18nProvider","i18n","locale","plurals","API_ETH_MOCK_ADDRESS","formatReserves","protocolData","reserveIncentives","rewardUndelyingAssetDict","marketReferenceCurrencyPriceInUsd","networkBaseTokenPriceDecimals","formattedReserve","formatReserve","calculateAllReserveIncentives","each","computed","getComputedReserveFields","underlyingAsserDict","formatUserReserves","poolUserData","poolReservesData","toUserSummary","totalCollateralUSD","userData","formatUserSummary","marketRefCurrencyDecimals","marketRefPriceInUsd","rawUserReserves","reserveWithBase","onlyNonNull","RPCClient","getReservesHumanized","getIncentivesDataWithPrice","poolData","reservesIncentives","shiftedBy","getUserReservesHumanized","getUserReservesIncentivesDataHumanized","userReserveIncentives","calcIncentive","UiPoolDataProvider","uiPoolDataProviderAddress","UiIncentiveDataProvider","incentiveDataProviderAddress","rewardUndelyingAsset","calculateAllUserIncentives","computedUserReserves","unclaimedBalance","claimableRewards","rewardTokenDecimals","supplies","liquidityIndex","totalScaledVariableDebt","totalPrincipalStableDebt","scaledSTokenBalance","scaledVariableDebt","principalStableDebt","Boolean","StakingService","TOKEN_STAKING_ADDRESS","STAKING_HELPER_ADDRESS","ethereum","isMetaMask","request","metamaskConnector","InjectedConnector","connectIfAuthorized","isSafeApp","isAuthorized","removeAllListeners","addListenersOnConnected","on","accounts","requestSwitchChain","chainInfo","chainIdHex","requestAddEthereumChain","tokenSymbol","tokenAddress","tokenPrecision","tokenImage","watchAssetOptions","image","SafeAppConnector","module","exports","messages","Show","Hide","show","hide","Network","Menu","Borrow","Repay","Amount","Max","Borrowed","Liquidity","Collateral","ON","OFF","Collateral_Amount","Disable","Enable","Deposited","Supply","Withdraw","Dashboard","Market","Faucet","Asset","APY","Supplied","Claim","Name","Action","Mint","Details","Price","Borrowing","Yes","No","Detail","Others","Token","TBD","Purchase","Staking","Balance","Confirm","ID","Redeem","Summary","L","left","right","str","slice","EXPONENTIAL_AT","lte","entries","pl","calculateAssetPL","profitInUSD","lossInUSD","rewardInUSD","assetPriceInUSD","depositedInUSD","borrowedInUSD","isFinite","amounts","localStorage","getItem","JSON","setItem","stringify","SCALES","BN_HUNDRED","formatNum","num","prefix","int","integerValue","formatted","toFormat","split","intLengthWithDot","max","min","adjustedDecimalPlaces","MAX_SAFE_INTEGER","shifted","opts","scaleIdx","ceil","scaledNum","option","formatUSDShort","formattedAmount","bn","BaseDebtToken","erc20Service","IDebtTokenBase__factory_1","delegatee","debtTokenContract","getContractInstance","txCallback","generateTxCallback","rawTxMethod","populateTransaction","approveDelegation","from","types_1","ERC20_APPROVAL","gas","generateTxPriceEstimation","allowanceGiver","allowanceReceiver","decimalsOf","borrowAllowance","delegatedAllowance","amountBNWithDecimals","ethers_1","valueToWei","BaseService_1","methodValidators_1","isEthAddress","isPositiveAmount","IDebtTokenBase__factory","signerOrProvider","_abi","inputs","internalType","outputs","stateMutability","BaseService","contractFactory","contractInstances","gasSurplus","action","skipEstimation","txRaw","utils_1","estimateGasByNetwork","gasLimit","gasRecommendation","limit","recommended","default","force","getGasPrice","gasPriceProv","estimateGas","estimatedGas","add","mul","getNetwork","polygon","getLink","hash","gateway","MEMORIZE","ipfsHash","startsWith","encode","Buffer","ipfsResponse","description","shortDescription","aip","author","discussions","ChainId","ProtocolAction","GovernanceVote","bignumber_js_1","ensAddress","endsWith","toHexString","MaxUint256","liquidationCall","liquidationFlash","borrowETH","withdrawETH","bid","updateBid","cancelBid","refundBid","AAVE","BAT","ENJ","KNC","LEND","LINK","MANA","MKR","REN","REP","SNX","SUSD","TUSD","UNI","YFI","ZRX","UNIUSDC","UNIDAI","UNIUSDT","UNIDAIETH","UNIUSDCETH","UNISETHETH","UNILENDETH","UNILINKETH","UNIMKRETH","propertyName","descriptor","isAddress","lendingPoolAddress","isEthAddressValidator","amountGtThan0Validator","amountGtThan0OrMinus1","amount0OrPositiveValidator","launchpadAddress","isEthAddressArrayValidator","stakingContractAddress","stakingHelperContractAddress","faucetAddress","wethGatewayAddress","aaveGovernanceV2Address","aaveGovernanceV2HelperAddress","isEthAddressOrEnsValidator","Symbol","field","propertyKey","parameterIndex","existingPossibleAddresses","Reflect","getOwnMetadata","defineMetadata","methodArguments","isParamOptional","addressParameters","paramValidators_1","storedParams","isOptional","canBeEnsAddress","amountParameters","amountMinusOneParameters","DebtERC20Service","DebtERC20__factory_1","tokenDecimals","isDelegated","debtErc20Contract","DEBTERC20_APPROVAL","allowance","erc20Contract","anonymous","indexed","DebtERC20__factory","ERC20Service","IERC20Detailed__factory_1","tokenMetadata","approve","isApproved","getTokenData","spender","nameGetter","symbolGetter","isPositiveOrMinusOneAmount","IERC20Detailed__factory","FaucetService","IFaucet__factory_1","userAddress","faucetContract","claim","FAUCET_MINT","IFaucet__factory","components","rawProposal","creator","executor","targets","signatures","calldatas","withDelegatecalls","startBlock","endBlock","executionTime","forVotes","againstVotes","executed","canceled","strategy","state","types_2","proposalState","minimumQuorum","minimumDiff","executionTimeWithGracePeriod","proposalCreated","totalVotingSupply","AaveGovernanceService","IAaveGovernanceV2__factory_1","GOVERNANCE_ADDRESS","GOVERNANCE_HELPER_ADDRESS","_a","proposalId","support","govContract","submitVote","GOVERNANCE_ACTION","skip","helper","IGovernanceV2Helper__factory_1","getProposals","proposal","humanizeProposal","getProposal","proposalStrategy","IGovernanceStrategy__factory_1","getVotingPowerAt","power","formatEther","getTokensPower","getVoteOnProposal","is0OrPositiveAmount","isEthAddressArray","IAaveGovernanceV2__factory","IGovernanceStrategy__factory","IGovernanceV2Helper__factory","ExecutorType","ProposalState","GovernancePowerDelegationTokenService","IGovernancePowerDelegationToken__factory_1","governanceToken","governanceDelegationToken","getDelegateeAddress","delegateeAddress","delegate","GOV_DELEGATION_ACTION","delegationType","delegateByType","expiry","signature","getNonce","nonce","splitSignature","v","r","s","delegateBySig","delegateByTypeBySig","governanceTokenName","typeData","types","EIP712Domain","Delegate","primaryType","domain","verifyingContract","DelegateByType","delegator","getDelegateeByType","getPowerCurrent","blockNumber","getPowerAtBlock","_nonces","resolveName","isEthAddressOrENS","IGovernancePowerDelegationToken__factory","IncentivesController","ISiO2IncentivesController__factory_1","to","incentivesControllerAddress","incentivesContract","claimRewards","REWARD_ACTION","ISiO2IncentivesController__factory","enumerable","PERMISSION","PERMISSION_MAP","Launchpad","Launchpad__factory_1","erc20_contract_1","priceCap","cancelable","reserveDecimals","convertedAmount","convertedPriceCap","approveTx","LaunchpadContract","getTxValue","DLP_ACTION","update","addBidding","updateCap","refund","participant","paid","multiplied","cap","price","claimable","refundable","Launchpad__factory","lendingPoolConfig","ILendingPool__factory_1","synthetixService","synthetix_contract_1","wethGatewayService","wethgateway_contract_1","onBehalfOf","referralCode","depositETH","synthetixValidation","formatAmount","numericRateMode","Variable","repayETH","swapBorrowRateMode","setUserUseReserveAsCollateral","liquidator","liquidatedUser","debtReserve","collateralReserve","purchaseAmount","getSToken","liquidateAll","ILendingPool__factory","Leverager__factory_1","debtErc20Service","debtErc20_contract_1","isETH","totalBorrowingAmount","calcTotalBorrowingAmount","approved","delegated","delegateTx","loopASTR","Leverager__factory","ROUND_CEIL","PermissionManager","permissionManagerAddress","_contract","PermissionManagerFactory_1","getUserPermissions","permissions","permissionsNumber","parsedPermissions","permission","permissionIndex","PermissionManagerTypes_1","PermissionManagerFactory","_bytecode","contracts_1","DEPOSITOR","BORROWER","LIQUIDATOR","STABLE_RATE_MANAGER","PriceFeedAggregatorAdapter","contractAddress","currentPrice","adapterContract","IPriceAggregatorAdapterFactory_1","IPriceAggregatorAdapterFactory","formatRawStakeData","StakeUiHelper__factory_1","getUserUIData","StakeUiHelper__factory","stakingServiceConfig","StakedToken__factory_1","stakingHelperContract","ISiO2StakingHelper__factory_1","stakingContract","STAKED_TOKEN","stakedToken","Permit","version","owner","deadline","stakedTokenDecimals","sig","stake","STAKE_ACTION","redeem","cooldown","REWARD_TOKEN","tPageSt","tPageSize","decimal","infos","getStakeInfosByPage","start","decimalsToCurrencyUnits","coolDown","ISiO2StakingHelper__factory","StakedToken__factory","cooldownSeconds","unstakeWindow","rewardsVault","emissionManager","overrides","mainnet","SynthetixService","ISynthetix__factory_1","synthContract","transferableSynthetix","transferableAmount","ISynthetix__factory","_getFeed","_chainlinkFeedsRegistries","feed","price_aggregator_adapter_1","UiIncentiveDataProviderFactory_1","getFullReservesIncentiveData","getReservesIncentivesData","sIncentiveData","_formatIncentiveData","vdIncentiveData","sdIncentiveData","getUserReservesIncentivesData","STokenIncentivesUserData","_formatUserIncentiveData","vdTokenIncentivesUserData","sdTokenIncentivesUserData","getReservesIncentivesDataHumanized","feeds","allIncentiveRewardTokens","Set","incentiveRewardTokens","Array","rewardFeedPromises","allSettled","feedResult","lFeed","vdFeed","sdFeed","priceFeed","incentiveIntialSupply","incentiveInflactionStart","incentiveDecayRatio","incentivesLastUpdateTimestamp","tokenIncentivesIndex","incentiveControllerAddress","precision","tokenIncentivesUserIndex","tokenincentivesUserIndex","userUnclaimedRewards","UiIncentiveDataProviderFactory","ammSymbolMap","UiPoolDataProviderFactory_1","getReservesList","getReservesData","getUserReservesData","reservesRaw","poolBaseCurrencyRaw","reserveRaw","stableBorrowRateEnabled","variableBorrowIndex","liquidityRate","variableBorrowRate","stableBorrowRate","lastUpdateTimestamp","stableDebtTokenAddress","interestRateStrategyAddress","averageStableRate","stableDebtLastUpdateTimestamp","variableRateSlope1","variableRateSlope2","stableRateSlope1","stableRateSlope2","marketReferenceCurrencyUnit","networkBaseTokenPriceInUsd","userReservesRaw","userReserveRaw","stableBorrowLastUpdateTimestamp","UiPoolDataProviderFactory","_networkBaseTokenPriceInUsdProxyAggregatorAdapter","_baseTokenAddress","WalletBalanceProviderFactory_1","users","every","u","batchBalanceOf","getUserWalletBalances","WalletBalanceProviderFactory","WETHGatewayService","IWETHGateway__factory_1","baseDebtTokenService","baseDebtToken_contract_1","wethGatewayContract","isDelegationApproved","approveDelegationTx","IWETHGateway__factory","n","clone","DECIMAL_PLACES","ROUNDING_MODE","ROUND_DOWN","rate","timeDelta","ratePerSecond","constants_1","binomialApproximatedRayPow","currentReserveIndex","principalUserBalance","reserveIndex","userIndex","reserveIndexTimestamp","totalSupply","isEqualTo","cumulativeDelta","ratio","lastSpan","lastDecayPeriod","cur","tail","eq","isLessThan","calculateRewardTokenPrice","underlyingAssetDict","addressLowerCase","underlyingAssetAddress","rewardReserve","reserveDict","reserveIncentive","calculatedReserveIncentives","calculateReserveIncentives","reserveIncentiveData","sRewardTokenPriceInMarketReferenceCurrency","vdRewardTokenPriceInMarketReferenceCurrency","sdRewardTokenPriceInMarketReferenceCurrency","sIncentivesData","vdIncentivesData","sdIncentivesData","userReserveIncentive","calculateUserReserveIncentives","userReserveData","incentiveController","accruedRewards","unclaimedRewards","flat","acc","reward","rewardTokenPriceInMarketReferenceCurrency","totasTokenSupply","emissionPerSecond","emissionPerSecondNormalized","emissionPerYear","totalSupplyNormalized","lIncentivesAPR","calculateIncentiveAPR","vdIncentivesAPR","sdIncentivesAPR","totalDeposits","rayDiv","sIncentivesRequest","vdIncentivesRequest","sdIncentivesRequest","calculateAccruedIncentives","reserveDebt","rayMul","calculateCompoundedInterest","getTotalVariableDebt","getTotalStableDebt","totalDebt","calculateReserveDebt","utilizationRate","index_1","rayPow","stableBorrowAPY","formatEnhancedReserve","normalizeWithReserve","supplyAPR","variableBorrowAPR","stableBorrowAPR","computedFields","nativeToUSD","currencyDecimals","totalDebtUSD","totalVariableDebtUSD","totalStableDebtUSD","calculateReserveDebtSuppliesRaw","totalLiquidityMarketReferenceCurrency","currentLtv","userReserveSummary","underlyingBalanceMarketReferenceCurrency","variableBorrowsMarketReferenceCurrency","stableBorrowsMarketReferenceCurrency","_reserve","exactStableBorrowRate","ray_math_1","underlyingBalanceUSD","stableBorrows","stableBorrowsUSD","variableBorrows","variableBorrowsUSD","convertToUsd","calculateUserReserveTotals","availableBorrowsMarketReferenceCurrency","calculateAvailableBorrowsMarketReferenceCurrency","currentLoanToValue","poolReserve","getLinearBalance","getMarketReferenceCurrencyAndUsdBalance","marketReferenceCurrencyBalance","usdBalance","getCompoundedBalance","principalBalance","reserveRate","getCompoundedStableBalance","userStableRate","calculateSupplies","generateUserReserveSummary","formattedUserReserves","computedUserReserve","formatUserReserve","generateRawUserSummary","RayMath","calculateLinearInterest","wadToRay","timeDeltaInSeconds","RAY","getReserveNormalizedIncome","cumulatedInterest","_principalBalance","compoundedInterest","principalBalanceRay","rayToWad","p","x","z","modulo","base","exp","expMinusOne","expMinusTwo","basePowerTwo","basePowerThree","firstTerm","secondTerm","thirdTerm","webpackAsyncContext","req","__webpack_require__","o","resolve","ids","t","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","m","amdO","O","chunkIds","priority","notFulfilled","fulfilled","j","splice","getter","__esModule","getPrototypeOf","obj","__proto__","ns","create","def","getOwnPropertyNames","definition","defineProperty","f","chunkId","promises","miniCssF","g","globalThis","prop","l","done","script","needAttach","scripts","getElementsByTagName","getAttribute","createElement","charset","timeout","nc","setAttribute","onScriptComplete","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","head","appendChild","toStringTag","nmd","paths","fullhref","existingLinkTags","dataHref","tag","existingStyleTags","findStylesheet","linkTag","errorType","realHref","err","createStylesheet","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}