.///. .///. //. .// `/////////////-
`++:++` .++:++` :++` `++: `++:......---.`
`/+: -+/` `++- :+/` /+/ `/+/ `++.
/+/ :+/ /+: /+/ `/+/ /+/` `++.
-::/++::` /+: -::/++::` `/+: `++: :++` `++/:::::::::.
-:+++::-` `/+: --++/---` `++- .++- -++. `++/:::::::::.
-++. .++- -++` .++. .++. .++- `++.
.++- -++. .++. -++. -++``++- `++.
`++: :++` .++- :++` :+//+: `++:----------`
-/: :/- -/: :/. ://: `/////////////-
An open source interface for the decentralized liquidity protocol Aave
Enabling users to:
- Manage and monitor their positions on the Aave Protocol, and the overall status of it
- Manage and monitor their positions on the Aave Safety module
- Participate in the Aave Governance
nvm use
yarn install
cp .env.example .env.local
yarn devThe app is served at http://localhost:3000.
Copy .env.example to .env.local (used by yarn dev/yarn build) and adjust as needed. .env.development shows the values used for the hosted staging build.
| Variable | Purpose |
|---|---|
URL |
Base URL the app is served from locally. |
NEXT_PUBLIC_ENV |
prod or staging. staging enables testnet markets and disables governance/staking/production markets. |
NEXT_PUBLIC_ENABLE_GOVERNANCE |
Feature flag to enable/disable the Governance pages (see next.config.js). |
NEXT_PUBLIC_ENABLE_STAKING |
Feature flag to enable/disable the Safety Module (staking) pages. |
NEXT_PUBLIC_API_BASEURL |
Base URL of the aave-api instance used for historical rates data (ratesHistoryApiUrl-style calls, market stats, etc). Point this at your own aave-api deployment if you're not using https://aave-api-v2.aave.com. |
NEXT_PUBLIC_FIAT_ON_RAMP |
Enable/disable the fiat on-ramp entry points. |
NEXT_PUBLIC_TRANSAK_APP_URL / NEXT_PUBLIC_TRANSAK_API_URL / NEXT_PUBLIC_TRANSAK_API_KEY |
Transak on-ramp integration config. |
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID |
WalletConnect Cloud project ID, required for WalletConnect to work. |
NEXT_PUBLIC_MIXPANEL |
Mixpanel analytics token (leave empty to disable analytics). |
TENDERLY_KEY / TENDERLY_ACCOUNT / TENDERLY_PROJECT |
Tenderly credentials, only needed for the Cypress integration test suite / chain forks. |
NEXT_PUBLIC_FORK_BASE_CHAIN_ID / NEXT_PUBLIC_FORK_CHAIN_ID / NEXT_PUBLIC_FORK_URL_RPC |
Chain-fork configuration for running against a Tenderly fork instead of a live network (see "Running Against a Chain Fork" in Contributing). |
This app is a customized deployment of the Aave interface (currently wired up for the Harmony network). Everything protocol-specific lives in src/ui-config/ rather than in environment variables:
-
src/ui-config/networksConfig.ts— one entry per chain (keyed byChainId), defining:publicJsonRPCUrl/privateJsonRPCUrl(+ optional WS variants) — RPC endpoints for the networkbaseAssetSymbol/wrappedBaseAssetSymbol/baseAssetDecimals— the native token (e.g.ONE/WONEfor Harmony) and its wrapped ERC20 counterpart, used for gas display, wrapping/unwrapping on withdraw, and adding the network to walletsexplorerLink/explorerLinkBuilder— block explorer used for tx/address linksratesHistoryApiUrl— the aave-api endpoint (/data/rates-history) to pull historical rates from for that network
-
src/ui-config/marketsConfig.tsx— one entry per market (keyed byCustomMarket), defining the on-chain contract addresses for that market'sPoolAddressesProvider-based deployment:LENDING_POOL_ADDRESS_PROVIDER— the AavePoolAddressesProvidercontract. This is also where the price oracle address comes from: the UI resolves thePriceOracle(and other core periphery contracts) at runtime via this provider contract, so there is no separate "oracle address" field to set manually — pointing this at the correctPoolAddressesProviderfor your deployment is enough.LENDING_POOL,WETH_GATEWAY,WALLET_BALANCE_PROVIDER,UI_POOL_DATA_PROVIDER,UI_INCENTIVE_DATA_PROVIDER,FAUCET,COLLECTOR, etc. — the rest of the periphery contract addresses for that marketsubgraphUrl— the subgraph used for reserve/market data on that market- For canonical, audited Aave deployments these addresses are usually pulled from
@bgd-labs/aave-address-book(see theproto_harmony_v3entry); for custom/testnet deployments they're hardcoded (seeproto_harmony_testnet_v3)
-
src/ui-config/stakeConfig.tsandsrc/ui-config/governanceConfig.ts— Safety Module (staking) and Governance contract addresses. In this deployment they're zeroed out / disabled (paired withNEXT_PUBLIC_ENABLE_STAKING=false/NEXT_PUBLIC_ENABLE_GOVERNANCE=false); fill these in with real addresses and flip the corresponding feature flag on to enable them. -
src/ui-config/reservePatches.ts— symbol remapping/display overrides for reserves (e.g. bridged/wrapped token naming), and token icons live underpublic/icons/tokens/<symbol>.svg.
To point the interface at a different network/market, add entries to networksConfig.ts and marketsConfig.tsx with the addresses above, add a matching icon set, then rebuild.
yarn dev # start the Next.js dev server (with hot reload) on localhost:3000
yarn build # production build
yarn build:static # production build + static export (for IPFS/S3/CDN hosting)
yarn start # start the production server (after `yarn build`)
yarn serve:static # serve the statically exported output (after `yarn build:static`)
yarn build:analyze # production build with the webpack bundle analyzer enabled
yarn build:optimize-svgs # run svgo over public/*.svg assetsLinting, tests & i18n:
yarn lint # lint code + formatting
yarn lint:fix # auto-fix lint + formatting issues
yarn test # unit tests (jest, watch mode)
yarn test:ci # unit tests, single run
yarn test:open # open the Cypress integration test suite (needs Tenderly env vars)
yarn test:headless # run the Cypress integration test suite headlessly
yarn i18n # extract + compile translation stringsFor instructions on local development, deployment, configurations & feature proposals, see Contributing
Also, contributors with at least one pull request that has been merged into the main branch are eligible for a unique GitPOAP. Visit gitpoap.io to claim it.
Each commit gets deployed to IPFS automatically
There's a github action commenting the appropriate IPFS hash embedded in the Cloudflare IPFS gateway after each commit
For ease of use:
- the DNS of https://staging.aave.com will always point to the latest main IPFS hash with all networks enabled
- the DNS of https://app.aave.com will always point to the latest main IPFS hash with disabled test networks
Issue: Cannot connect to app.aave.com
The aave-ui is hosted on IPFS in a decentralized manner. app.aave.com just holds a CNAME record to the Cloudflare IPFS gateway. You can use any public or private IPFS gateway supporting origin isolation to access aave-ui if for some reason the Cloudflare gateway doesn't work for you
Just go to <your favorite public ipfs gateway>/ipns/app.aave.com
https://app-aave-com.<your gateway>
To all the Ethereum community
