Skip to content

Releases: AvaProtocol/protocols

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 05:32
bfee149

Minor Changes

  • 0562978: Add the BNB Chain baseline to the token catalog: WBNB, Binance-Peg BTCB and ETH, FDUSD, USD1, USDe, sUSDe, Cake, wstETH, slisBNB, LBTC, SolvBTC, XVS, LINK, and BNBx (legacy: Stader discontinued it). Each address was checked against the issuer's or BNB Chain's published list and on-chain.

    lookupToken(56, WBNB) now returns WBNB. Before, it fell through to Protocols.uniswapV3.tokens.WETH, whose BNB Chain entry holds WBNB, and answered with symbol "WETH". BNB Chain's ETH symbol is the Binance-Peg ERC-20, not native ETH.

  • 0562978: Fill the Ethereum and Base token-catalog gaps found by the coverage audit (#38).

    • Ethereum: RLUSD, USDG, GHO, cbETH, sDAI, crvUSD, LUSD, USDtb, eUSDe, SKY, BAL, 1INCH, FXS, KNC, STG, ETHx, ezETH, tETH, frxETH, sfrxETH, FBTC, eBTC, BTC.b, mUSD and syrupUSDT.
    • Base: RLUSD (0x8d58C0C60B8D6b88Fa98B291a646dB34d0F98258, Ripple's L2 address), WBTC, GHO, LBTC, tBTC, weETH, ezETH, wrsETH, syrupUSDC, USDS, sUSDS, USDe and sUSDe.

    Every Aave V3 Core reserve on Ethereum, Base and BNB Chain (except expiring Pendle PTs) is now in Tokens, so lookupToken recognizes them without the per-protocol fallback.

  • b377e71: Add Circle EURC to the Ethereum, Base, Sepolia and Base Sepolia token catalogs. Addresses follow https://developers.circle.com/stablecoins/eurc-contract-addresses.

  • 0562978: Rename Ethereum Tokens["SolvBTC.BBN"] to Tokens.xSolvBTC (0xd9D920AA40f578ab794426F5C90F6C731D159DEf). Solv rebranded the token: the contract's name() and symbol() both return xSolvBTC. The address and decimals are unchanged; lookupToken and the Ethereum sidecar (dist/tokens/ethereum.json) now return xSolvBTC for it.

    Code that reads Tokens["SolvBTC.BBN"] must switch to Tokens.xSolvBTC.

  • 0562978: Record transfer constraints on token rows and pin catalog addresses to their sources.

    • TokenChainEntry.transferConstraints lists behaviour that makes a plain transfer to an arbitrary address revert or deliver a different amount. Values come from the new TOKEN_TRANSFER_CONSTRAINT: permissionedRecipient (OUSG, BUIDL, USYC), rebasing (stETH, eETH) and feeOnTransfer (none listed). No constraints means none is known, not that every transfer succeeds.
    • Provenance for each row (canonical sources, native/bridged/test, verification date) lives in src/tokens/provenance/*.json. Tests read it; the package does not ship it.
    • tests/token-coverage.test.ts enforces a defined coverage target per chain, address agreement between provenance, Tokens and protocol modules, and one symbol per address across chains.
    • docs/TOKEN_CATALOG.md documents the inclusion and maintenance policy and how consumers should separate recognizing a holding from deciding whether it can be transferred. docs/TOKEN_COVERAGE.md is the generated per-chain matrix (yarn report:tokens).

Patch Changes

  • 0562978: Correct Base Sepolia USDT (0xCE8565457Cca0fC7542608A2c78610Ed7bC66C8C) to 18 decimals. The row said 6, but the contract's decimals() returns 18, so amounts formatted from the catalog were off by 10^12. The contract is an unverified third-party test token, not a Tether deployment. Add yarn verify:tokens, a read-only check of every catalog row's code, decimals() and symbol() against the chain.

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 19:14
96a94e8

Minor Changes

  • 1a6a8da: Add uniswapV3Pool({ chainId, tokenA, tokenB, fee }), which derives the canonical Uniswap v3 pool address and token order from the catalog factory. UNISWAP_V3_FEE_TIERS is the list of fee tiers to try (100, 500, 3000, 10000). The address is a CREATE2 prediction: callers still check getPool and liquidity() before offering a pool.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 07:06
5ef172e

Major Changes

  • c74d262: Remove Chains.Holesky (17000). EigenLayer has sunset Holesky and Ava Protocol's testnet AVS moved to Sepolia, so the constant no longer names a chain anything in this catalog targets.

    Nothing in the catalog covered it: no protocol module and no token declared a 17000 entry, so dist/tokens/holesky.json was never actually emitted despite the sidecar's filename map and README listing it. The removal drops the constant, its sidecar filename entry, and both doc references.

    Breaking: Chains.Holesky no longer exists. Callers referencing it fail to compile. There is no replacement — use Chains.Sepolia (11155111) for testnet work.

Minor Changes

  • 3df9da0: Add Polygon PoS (137) and Hyperliquid EVM (999) to Chains, and map wrapped.weth to the canonical native wrappers: WPOL 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270 (legacy WMATIC) and WHYPE 0x5555555555555555555555555555555555555555. No Uniswap/AAVE on HyperEVM in this change; Polygon protocol maps are a follow-up.

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 03:51
4ffd856

Minor Changes

  • ce25af5: Add Robinhood Chain (4663) Uniswap V3 (SwapRouter02 / QuoterV2 / Factory / NFT Position Manager / Permit2 / Universal Router) plus wrapped.weth. Addresses from the official Uniswap Robinhood deployment page and Robinhood token-contracts docs. No AAVE; no Circle USDC (the chain's day-one stable is USDG).

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 02:20
5412692

Minor Changes

  • 70c52bf: Add Unichain (130) Uniswap V3 (SwapRouter02 / QuoterV2 / Factory / NFT Position Manager / Permit2 / Universal Router) plus wrapped.weth and native Circle USDC. Addresses from the official Uniswap Unichain deployment page and Circle USDC docs.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 19:37
0096020

Minor Changes

  • 0e9a255: Add Uniswap V3 (SwapRouter02 / QuoterV2 / Factory / NFT Position Manager / Permit2 / Universal Router) plus wrapped.weth and native Circle USDC on Arbitrum One (42161) and Optimism (10). Addresses from the official Uniswap deployment pages. This unblocks SessionPolicyActions.uniswapV3Swap(chainId) in the SDK — that helper reads swapRouter02[chainId] and refuses unknown chains.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 19:09
9499e3b

Minor Changes

  • 88ec8f2: Ship AAVE V3 Pool coverage for writes (issue #23).

    • Add Arbitrum One (42161) and Optimism (10) to Chains and to the AAVE V3 pool / oracle / poolAddressesProvider / uiPoolDataProvider / wethGateway maps. Addresses from @aave-dao/aave-address-book (AaveV3Arbitrum, AaveV3Optimism).
    • Add aaveV3.markets — every Pool on a chain, not just the canonical one. Ethereum lists Core / EtherFi / Lido / Horizon; every other covered chain is a single core row. Each row carries pool plus poolAddressesProvider (the on-chain getPool() escape hatch). aaveV3.pool[chainId] stays Core so existing consumers do not break.
    • Document that the static Pool map is a deliberate cache, not an assumption of immutability.
    • Regenerate aaveV3.reserves so Arbitrum and Optimism ship a Core reserve list (underlyings / aTokens / decimals). Without this a consumer can resolve a Pool and still get an empty supply-token picker.
    • Guard the next regenerate: a test now asserts reserves covers the same chain set as pool. Bridged USDC.e on Arb/OP is labeled USDC.e (on-chain symbol() is still "USDC") so a symbol lookup cannot silently resolve to the bridged token.

    Non-goal (unchanged): aaveV3.reserves stays Core-only. Non-Core Ethereum markets (EtherFi / Lido / Horizon) list different reserves; scoping those is a separate issue.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 21 Jul 05:00
c847b17

Minor Changes

  • b8bcb3f: Ship AAVE V3 reserve-config read surface (issue #19, the scale optimization).

    • Add aaveV3.poolAddressesProvider and aaveV3.uiPoolDataProvider per-chain address maps (Mainnet, Sepolia, Base, Base Sepolia, BNB). Each PoolAddressesProvider was verified on-chain — getPool() returns the catalog's existing pool address — and each UiPoolDataProvider verified as deployed bytecode.
    • Extend aaveV3.poolMethodsAbi with the version-stable Pool config reads: getConfiguration(asset), getUserConfiguration(user), and getReserveData(asset) (ReserveDataLegacy). These cover a health-factor / liquidation solver's per-reserve risk config, a user's collateral/borrow flags, and the indices needed to scale balances — on every chain, with no periphery-version pinning.
    • Export aaveV3.reserveConfigurationBits and aaveV3.userConfigurationBits — the ReserveConfigurationMap / UserConfigurationMap bit layouts — so consumers decode the on-chain bitmaps without hardcoding offsets. Only the version-stable low bits (0–167) are exported; higher bits shift across deployed V3 versions and are intentionally omitted.

    Non-goal (unchanged): governance-mutable, HF-critical values (ltv / liquidationThreshold / usageAsCollateralEnabled) are not baked into the static AaveV3Reserve catalog — the catalog ships the address to read from, not the values. The UiPoolDataProvider address is shipped without its return-struct ABI on purpose: that tuple is periphery-version-specific and already differs across covered chains (Ethereum/Base/BNB/Base Sepolia return the v3.3 layout, Sepolia an earlier one), so pair the address with a version-aware ABI at the call site.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 09 Jun 01:56
4786058

Patch Changes

  • 0124250: Guard buildTokensFromData against a duplicate chainId in PER_CHAIN.

    If the same chain were listed twice (a copy-paste in the array, or two chain modules reporting the same chainId), the flatten would silently overwrite the first chain's entries and produce a wrong Tokens.SYMBOL[chainId] map with no error at module load. It now throws fast pointing at the duplicate.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 09 Jun 01:46
41a2e75

Minor Changes

  • 88236bb: Add AAVE V3 reserve catalog (aaveV3.reserves).

    Per-chain list of every AAVE V3 reserve as { symbol, underlying, aToken, variableDebtToken, decimals }, generated from chain via Pool.getReservesList + Pool.getReserveData (yarn generate:aave-reserves). Covers Ethereum, Base, BNB, Sepolia, and Base Sepolia. Lets consumers build AAVE supply-token pickers (underlying → aToken receipt) without an on-chain round-trip. Adds the AaveV3Reserve / AaveV3ReservesByChain types.