|
1 | 1 | const utils = require('../utils');
|
| 2 | +const axios = require('axios'); |
2 | 3 |
|
3 |
| -const uniquePools = new Set(); |
4 |
| -const getApy = async () => { |
| 4 | +const apy = async () => { |
5 | 5 | const tvlData = await utils.getData(
|
6 |
| - 'https://api-osmosis.imperator.co/pools/v2/all?low_liquidity=false' |
| 6 | + 'https://data.osmosis.zone/pairs/v2/summary' |
7 | 7 | );
|
8 |
| - const aprData = await utils.getData( |
9 |
| - 'https://api-osmosis.imperator.co/apr/v2/all' |
10 |
| - ); |
11 |
| - |
12 |
| - const data = Object.keys(tvlData).map((poolId) => { |
13 |
| - const tvl = tvlData[poolId]; |
14 |
| - const x = tvl[0]; |
15 |
| - |
16 |
| - const poolSplit = x.denom.split('/'); |
17 |
| - const pool = poolSplit.length > 1 ? poolSplit[1] : poolSplit[0]; |
18 | 8 |
|
19 |
| - const tvlUsd = x.liquidity; |
| 9 | + const aprData = await axios.get('https://osmosis.numia.xyz/pools_apr_range', { |
| 10 | + headers: { |
| 11 | + Authorization: `Bearer ${process.env.OSMOSIS_API_KEY}`, |
| 12 | + 'Content-Type': 'application/json', |
| 13 | + }, |
| 14 | + }); |
20 | 15 |
|
21 |
| - const symbol = `${tvl[0]?.symbol}-${tvl[1]?.symbol}`; |
| 16 | + const data = tvlData.data.map((pool) => { |
| 17 | + const symbol = `${pool.base_symbol}-${pool.quote_symbol}`; |
22 | 18 |
|
23 | 19 | if (symbol.includes(undefined)) return null;
|
24 | 20 |
|
25 |
| - // base apr |
26 |
| - const feeTier = x.fees.replace('%', '') / 100; |
27 |
| - const fees24h = x.volume_24h * feeTier; |
28 |
| - const fees7d = x.volume_7d * feeTier; |
29 |
| - const aprBase = ((fees24h * 365) / tvlUsd) * 100; |
30 |
| - const aprBase7d = ((fees7d * 52) / tvlUsd) * 100; |
31 |
| - |
32 |
| - // reward apr |
33 |
| - const aprs = aprData.find((a) => String(a.pool_id) === poolId)?.apr_list; |
34 |
| - |
35 |
| - const aprReward = aprs?.reduce((acc, reward) => acc + reward.apr_14d, 0); |
36 |
| - const aprSuperfluid = aprs?.reduce( |
37 |
| - (acc, reward) => acc + reward.apr_superfluid, |
38 |
| - 0 |
39 |
| - ); |
40 |
| - const apyReward = aprSuperfluid > 0 ? aprSuperfluid : aprReward; |
| 21 | + const apr = aprData.data.find((i) => i.pool_id === pool.pool_id); |
| 22 | + if (!apr) return null; |
| 23 | + const apyBase = apr.swap_fees.lower; |
41 | 24 |
|
42 | 25 | return {
|
43 |
| - pool: `osmosis-${poolId}`, |
| 26 | + pool: `osmosis-${pool.pool_id}`, |
44 | 27 | chain: 'Osmosis',
|
45 | 28 | project: 'osmosis-dex',
|
46 | 29 | symbol: utils.formatSymbol(symbol),
|
47 |
| - poolMeta: `${tvl[0].fees}`, |
48 |
| - tvlUsd: x.liquidity, |
49 |
| - apyBase: aprBase, |
50 |
| - apyBase7d: aprBase7d, |
51 |
| - apyReward, |
52 |
| - rewardTokens: aprs?.map((a) => a?.symbol) ?? [], |
53 |
| - volumeUsd1d: x.volume_24h, |
54 |
| - volumeUsd7d: x.volume_7d, |
| 30 | + tvlUsd: pool.liquidity, |
| 31 | + apyBase, |
| 32 | + apyBase7d: apyBase, |
| 33 | + volumeUsd1d: pool.volume_24h, |
| 34 | + volumeUsd7d: pool.volume_7d, |
| 35 | + url: `https://app.osmosis.zone/pool/${pool.pool_id}`, |
| 36 | + poolMeta: `#${pool.pool_id}`, |
55 | 37 | };
|
56 | 38 | });
|
57 | 39 |
|
58 |
| - return data.filter((p) => p && utils.keepFinite(p)); |
| 40 | + return utils.removeDuplicates(data.filter((p) => p && utils.keepFinite(p))); |
59 | 41 | };
|
60 | 42 |
|
61 | 43 | module.exports = {
|
62 |
| - timetravel: false, |
63 |
| - apy: getApy, |
64 |
| - url: 'https://app.osmosis.zone/pools', |
| 44 | + apy, |
65 | 45 | };
|
0 commit comments