|
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