aave-v3-react
Version:
A collection of React hooks to interact with the Aave V3 pools and smart contracts.
2 lines • 11.7 kB
JavaScript
import{formatReserves as he}from"@aave/math-utils";import{useQuery as De}from"@tanstack/react-query";import Se from"dayjs";import{Pool as fe,PoolBundle as Pe,UiIncentiveDataProvider as Re,UiPoolDataProvider as xe}from"@aave/contract-helpers";import{createContext as Ce,useContext as Ee,useMemo as d}from"react";import{useChainId as we}from"wagmi";import{AaveV3Sepolia as F,AaveV3Ethereum as N,AaveV3Arbitrum as H,AaveV3ArbitrumSepolia as Q,AaveV3Avalanche as G,AaveV3Base as K,AaveV3BaseSepolia as q,AaveV3Linea as M,AaveV3Mantle as z,AaveV3ZkSync as $,AaveV3Gnosis as j,AaveV3BNB as Y,AaveV3Polygon as Z,AaveV3Optimism as J,AaveV3OptimismSepolia as X,AaveV3Scroll as ee,AaveV3ScrollSepolia as re}from"@bgd-labs/aave-address-book";import{sepolia as C,mainnet as E,arbitrum as w,arbitrumSepolia as A,avalanche as T,base as h,bsc as D,baseSepolia as S,fantom as te,fantomTestnet as oe,gnosis as g,harmonyOne as se,avalancheFuji as ne,polygonMumbai as ae,polygon as I,polygonZkEvm as ie,optimism as U,optimismSepolia as W,scrollSepolia as b,scroll as k,linea as B,mantle as V,zksync as pe}from"viem/chains";var ue=[C,E,w,A,T,h,S,te,oe,g,se,ne,ae,I,ie,U,W,k,b,D,B,V],O=e=>{switch(e){case D.id:return Y;case C.id:return F;case E.id:return N;case w.id:return H;case A.id:return Q;case T.id:return G;case h.id:return K;case S.id:return q;case g.id:return j;case I.id:return Z;case U.id:return J;case W.id:return X;case k.id:return ee;case b.id:return re;case B.id:return M;case V.id:return z;case pe.id:return $;default:throw new Error("Chain not supported")}};var me=(e,r=2)=>`${(Number(e??0)*100).toFixed(r)}%`;import ce from"bignumber.js";var de=(e,r,t=2)=>{let o=ce(e??0);if(o.isNaN())return"NaN";if(o.isZero())return"0";if(o.lt(.01))return"< 0.01";let s=`${Number(e??0).toFixed(t)}`;return r?new Intl.NumberFormat("it-IT",{style:"currency",currency:r}).format(Number(s)):s};import{providers as f}from"ethers";import{useMemo as le}from"react";import{useClient as ye}from"wagmi";function ve(e){let{chain:r,transport:t}=e,o={chainId:r.id,name:r.name,ensAddress:r.contracts?.ensRegistry?.address};return t.type==="fallback"?new f.FallbackProvider(t.transports.map(({value:s})=>new f.JsonRpcProvider(s?.url,o))):new f.JsonRpcProvider(t.url,o)}function P({chainId:e}={}){let r=ye({chainId:e});if(!r)throw new Error("No client found");return le(()=>ve(r),[r])}import{jsx as Te}from"react/jsx-runtime";var _=Ce(null),Ae=({children:e})=>{let r=we(),t=P({chainId:r}),o=d(()=>O(r),[r]),s=d(()=>t?new xe({uiPoolDataProviderAddress:o.UI_POOL_DATA_PROVIDER,provider:t,chainId:o.CHAIN_ID}):null,[t,o]),n=d(()=>t?new Re({uiIncentiveDataProviderAddress:o.UI_INCENTIVE_DATA_PROVIDER,provider:t,chainId:o.CHAIN_ID}):null,[t,o]),i=d(()=>t?new fe(t,{POOL:o.POOL,WETH_GATEWAY:o.WETH_GATEWAY}):null,[t,o]),c=d(()=>t?new Pe(t,{POOL:o.POOL,WETH_GATEWAY:o.WETH_GATEWAY}):null,[t,o]),v=d(()=>({provider:t,poolDataProviderContract:s,incentiveDataProviderContract:n,chainAddressBook:o,poolContract:i,poolBundleContract:c}),[t,s,n,o,i,c]);return Te(_.Provider,{value:v,children:e})},a=()=>{let e=Ee(_);if(!e)throw new Error("AaveContractsContext has to be used within <AaveContractsContext.Provider>");return e};var m=async(e,r)=>{let t=await e.getReservesHumanized({lendingPoolAddressProvider:r.POOL_ADDRESSES_PROVIDER});return{reserves:t,formattedReserves:he({reserves:t.reservesData,currentTimestamp:Se().unix(),marketReferenceCurrencyDecimals:t.baseCurrencyData.marketReferenceCurrencyDecimals,marketReferencePriceInUsd:t.baseCurrencyData.marketReferenceCurrencyPriceInUsd})}},u=e=>["AAVE",e,"RESERVES"],ge=()=>{let{poolDataProviderContract:e,chainAddressBook:r}=a(),t=!!e&&!!r;return De({queryKey:u(r.CHAIN_ID),queryFn:async()=>t?m(e,r):null,enabled:t})};import{formatReservesAndIncentives as Ie}from"@aave/math-utils";import Ue from"dayjs";import{useQueryClient as We,useQuery as be}from"@tanstack/react-query";var R=async(e,r,t)=>{let o=await e.getReservesIncentivesDataHumanized({lendingPoolAddressProvider:r.POOL_ADDRESSES_PROVIDER});return{reserveIncentives:o,formattedReservesIncentives:Ie({reserves:t.reserves.reservesData,reserveIncentives:o,currentTimestamp:Ue().unix(),marketReferenceCurrencyDecimals:t.reserves.baseCurrencyData.marketReferenceCurrencyDecimals,marketReferencePriceInUsd:t.reserves.baseCurrencyData.marketReferenceCurrencyPriceInUsd})}},l=e=>["AAVE",e,"RESERVES_INCENTIVES"],ke=()=>{let{poolDataProviderContract:e,incentiveDataProviderContract:r,chainAddressBook:t}=a(),o=We(),s=!!e&&!!t&&!!r;return be({queryKey:l(t.CHAIN_ID),queryFn:async()=>{if(!s)return null;let n=await o.ensureQueryData({queryKey:u(t.CHAIN_ID),queryFn:()=>m(e,t)});return R(r,t,n)},enabled:s})};import{formatUserSummary as Be}from"@aave/math-utils";import Ve from"dayjs";import{useQuery as Oe,useQueryClient as _e}from"@tanstack/react-query";var x=async(e,r,t,o)=>{let s=await e.getUserReservesHumanized({lendingPoolAddressProvider:r.POOL_ADDRESSES_PROVIDER,user:t});return{userReserves:s,formattedReserves:Be({userReserves:s.userReserves,userEmodeCategoryId:s.userEmodeCategoryId,currentTimestamp:Ve().unix(),marketReferenceCurrencyDecimals:o.reserves.baseCurrencyData.marketReferenceCurrencyDecimals,marketReferencePriceInUsd:o.reserves.baseCurrencyData.marketReferenceCurrencyPriceInUsd,formattedReserves:o.formattedReserves})}},y=(e,r)=>["AAVE",e,"USER_RESERVES",r],Le=e=>{let{poolDataProviderContract:r,chainAddressBook:t}=a(),o=_e(),s=!!r&&!!t&&!!e;return Oe({queryKey:y(t.CHAIN_ID,e),queryFn:async()=>{if(!s)return null;let n=await o.ensureQueryData({queryKey:u(t.CHAIN_ID),queryFn:()=>m(r,t)});return x(r,t,e,n)},enabled:s})};import{formatUserSummaryAndIncentives as Fe}from"@aave/math-utils";import Ne from"dayjs";import{useQueryClient as He,useQuery as Qe}from"@tanstack/react-query";var Ge=async(e,r,t,o,s,n)=>{let i=await e.getUserReservesIncentivesDataHumanized({lendingPoolAddressProvider:r.POOL_ADDRESSES_PROVIDER,user:t});return{userReservesIncentives:i,formattedUserSummary:Fe({currentTimestamp:Ne().unix(),marketReferenceCurrencyDecimals:o.reserves.baseCurrencyData.marketReferenceCurrencyDecimals,marketReferencePriceInUsd:o.reserves.baseCurrencyData.marketReferenceCurrencyPriceInUsd,userReserves:n.userReserves.userReserves,userEmodeCategoryId:n.userReserves.userEmodeCategoryId,formattedReserves:o.formattedReserves,reserveIncentives:s.reserveIncentives,userIncentives:i})}},L=(e,r)=>["AAVE",e,"USER_RESERVES_INCENTIVES",r],Ke=e=>{let{poolDataProviderContract:r,incentiveDataProviderContract:t,chainAddressBook:o}=a(),s=He(),n=!!r&&!!o&&!!e&&!!t;return Qe({queryKey:L(o.CHAIN_ID,e),queryFn:async()=>{if(!n)return null;let i=await s.ensureQueryData({queryKey:u(o.CHAIN_ID),queryFn:()=>m(r,o)}),c=await s.ensureQueryData({queryKey:l(o.CHAIN_ID),queryFn:()=>R(t,o,i)}),v=await s.ensureQueryData({queryKey:y(o.CHAIN_ID,e),queryFn:()=>x(r,o,e,i)});return Ge(t,o,e,i,c,v)},enabled:n})};import{useMutation as Me}from"@tanstack/react-query";import{BigNumber as qe}from"ethers";var p=async({signer:e,txs:r})=>{let t=[];return await Promise.all(r.map(async o=>{let n=await o.tx(),i=await e.sendTransaction({...n,value:qe.from(n.value).toBigInt()});t.push(i)})),t};var ze=async(e,r)=>await e.supply(r),$e=({signer:e})=>{let{poolContract:r}=a();return Me({mutationFn:async o=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let s=await ze(r,{...o,user:e.account.address});if(!s)throw new Error("Supply transactions not found");return await p({signer:e,txs:s})}})};import{useMutation as je}from"@tanstack/react-query";var Ye=async(e,r)=>await e.withdraw(r),Ze=({signer:e})=>{let{poolContract:r}=a();return je({mutationFn:async o=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let s=await Ye(r,{...o,user:e.account.address});if(!s)throw new Error("Withdraw transactions not found");return await p({signer:e,txs:s})}})};import{InterestRate as Je}from"@aave/contract-helpers";import{useMutation as Xe}from"@tanstack/react-query";var er=async(e,r)=>await e.repay(r),rr=({signer:e})=>{let{poolContract:r}=a();return Xe({mutationFn:async({interestRateMode:o=Je.Variable,...s})=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let n=await er(r,{...s,interestRateMode:o,user:e.account.address});if(!n)throw new Error("Repay transactions not found");return await p({signer:e,txs:n})}})};import{InterestRate as tr}from"@aave/contract-helpers";import{useMutation as or}from"@tanstack/react-query";var sr=async(e,r)=>await e.borrow(r),nr=({signer:e})=>{let{poolContract:r}=a();return or({mutationFn:async({interestRateMode:o=tr.Variable,...s})=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let n=await sr(r,{...s,user:e.account.address,interestRateMode:o});if(!n)throw new Error("Borrow transactions not found");return await p({signer:e,txs:n})}})};import{useMutation as ar}from"@tanstack/react-query";import{ethers as ir}from"ethers";import pr from"dayjs";var ur=async(e,r)=>await e.signERC20Approval(r),mr=({signer:e})=>{let{poolContract:r}=a(),t=new ir.providers.Web3Provider(window.ethereum);return ar({mutationFn:async({deadline:s=pr().add(1,"day").unix().toString(),...n})=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let i=await ur(r,{...n,deadline:s,user:e.account.address});if(!i)throw new Error("signature not found");return await t.send("eth_signTypedData_v4",[e.account.address,i])}})};import{useMutation as cr}from"@tanstack/react-query";import dr from"dayjs";var lr=async(e,r)=>await e.supplyWithPermit(r),yr=({signer:e})=>{let{poolContract:r}=a();return cr({mutationFn:async({deadline:o=dr().add(1,"day").unix().toString(),...s})=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let n=await lr(r,{...s,deadline:o,user:e.account.address});if(!n)throw new Error("supplyWithPermit transactions not found");return await p({signer:e,txs:n})}})};import{InterestRate as vr}from"@aave/contract-helpers";import{useMutation as fr}from"@tanstack/react-query";import Pr from"dayjs";var Rr=async(e,r)=>await e.repayWithPermit(r),xr=({signer:e})=>{let{poolContract:r}=a();return fr({mutationFn:async({interestRateMode:o=vr.Variable,deadline:s=Pr().add(1,"day").unix().toString(),...n})=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let i=await Rr(r,{...n,interestRateMode:o,deadline:s,user:e.account.address});if(!i)throw new Error("RepayWithPermit transactions not found");return await p({signer:e,txs:i})}})};import{useMutation as Cr}from"@tanstack/react-query";var Er=async(e,r)=>await e.setUsageAsCollateral(r),wr=({signer:e})=>{let{poolContract:r}=a();return Cr({mutationFn:async o=>{if(!r)throw new Error("Pool contract not found");if(!e.account)throw new Error("Signer account not found");let s=await Er(r,{...o,user:e.account.address});if(!s)throw new Error("SetUsageAsCollateral transactions not found");return await p({signer:e,txs:s})}})};export{Ae as AaveContractsProvider,me as formatAPY,de as formatBalance,l as getReservesIncentivesQueryKey,u as getReservesQueryKey,L as getUserReservesIncentivesQueryKey,y as getUserReservesQueryKey,ue as supportedNetworks,nr as useBorrow,P as useEthersProvider,rr as useRepay,xr as useRepayWithPermit,ge as useReserves,ke as useReservesIncentives,wr as useSetUsageAsCollateral,mr as useSignERC20Approval,$e as useSupply,yr as useSupplyWithPermit,Le as useUserReserves,Ke as useUserReservesIncentives,Ze as useWithdraw};
//# sourceMappingURL=index.js.map