From 84fae34e683c4611dbdcd8e74696e52f87d33cec Mon Sep 17 00:00:00 2001 From: estebgonza Date: Wed, 17 Jun 2026 20:50:46 +0300 Subject: [PATCH] fix(snowbl-capital): migrate to new vaults (USDC/ETH/BTC) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous single USDC vault (sSnowbl, 0xd61b…06e8) was retired after a contract migration. Return one pool per new Base ERC-4626 vault, each with its own underlying decimals and USD price: - sUSD -> USDC (6 decimals) - sETH -> WETH (18 decimals) - sBTC -> cbBTC (8 decimals) --- src/adaptors/snowbl-capital/index.js | 69 +++++++++++++++++++++------- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/src/adaptors/snowbl-capital/index.js b/src/adaptors/snowbl-capital/index.js index da9ecbd819..67ffa157c7 100644 --- a/src/adaptors/snowbl-capital/index.js +++ b/src/adaptors/snowbl-capital/index.js @@ -1,25 +1,62 @@ const utils = require('../utils'); +const CHAIN = 'base'; + +const vaults = [ + { + address: '0x0e1a8354e10057092ecb7218b784c0c21710db91', + symbol: 'USDC', + underlyingToken: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', + decimals: 6, + poolMeta: 'Snowbl Vault USD', + }, + { + address: '0xffa67bd20e656f1c7873525df81728e9d26c8ee2', + symbol: 'WETH', + underlyingToken: '0x4200000000000000000000000000000000000006', + decimals: 18, + poolMeta: 'Snowbl Vault ETH', + }, + { + address: '0xf423393e84ca810e1955a7806d1cd84d18099809', + symbol: 'cbBTC', + underlyingToken: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', + decimals: 8, + poolMeta: 'Snowbl Vault BTC', + }, +]; + const apy = async (timestamp) => { - const snowblVault = await utils.getERC4626Info( - '0xd61bfc9ca1d0d2b03a3dd74e2ab81df8e5f606e8', - 'base', - timestamp + const { pricesByAddress } = await utils.getPrices( + vaults.map((v) => v.underlyingToken), + CHAIN ); - const { tvl, ...rest } = snowblVault; + return Promise.all( + vaults.map(async (v) => { + const { tvl, ...rest } = await utils.getERC4626Info( + v.address, + CHAIN, + timestamp + ); + const price = pricesByAddress[v.underlyingToken.toLowerCase()]; + if (price == null || !Number.isFinite(price)) { + throw new Error( + `Missing/invalid price for ${v.underlyingToken} on ${CHAIN}` + ); + } - return [ - { - ...rest, - project: 'snowbl-capital', - symbol: 'USDC', - tvlUsd: tvl / 1e6, - underlyingTokens: ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'], - poolMeta: 'Snowbl Capital USDC Vault', - url: 'https://snowbl.capital', - }, - ]; + return { + ...rest, + project: 'snowbl-capital', + symbol: v.symbol, + tvlUsd: (tvl / 10 ** v.decimals) * price, + underlyingTokens: [v.underlyingToken], + poolMeta: v.poolMeta, + url: 'https://snowbl.capital', + }; + }) + ); }; module.exports = {