Skip to content

Commit 7839dd8

Browse files
authored
Merge pull request #2231 from 0xShad0w/master
add ramses-hl-cl yields
2 parents 9f4a2e4 + c548209 commit 7839dd8

File tree

1 file changed

+150
-0
lines changed

1 file changed

+150
-0
lines changed

src/adaptors/ramses-hl/index.js

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
const axios = require('axios');
2+
const { request, gql } = require('graphql-request');
3+
const utils = require('../utils');
4+
5+
const RAM = '0x13A466998Ce03Db73aBc2d4DF3bBD845Ed1f28E7';
6+
const PROJECT = 'ramses-hl';
7+
const CHAIN = 'hyperliquid';
8+
const SUBGRAPH = 'https://hyperevm.kingdomsubgraph.com/subgraphs/name/ramses-v3-pruned/';
9+
10+
const poolsQuery = gql`
11+
query getPools($first: Int!, $skip: Int!) {
12+
clPools(
13+
first: $first
14+
skip: $skip
15+
orderBy: totalValueLockedUSD
16+
orderDirection: desc
17+
where: { gauge_not: null }
18+
) {
19+
id
20+
token0 {
21+
id
22+
symbol
23+
}
24+
token1 {
25+
id
26+
symbol
27+
}
28+
feeTier
29+
tickSpacing
30+
totalValueLockedUSD
31+
gauge {
32+
id
33+
}
34+
poolDayData(first: 7, orderBy: startOfDay, orderDirection: desc) {
35+
volumeUSD
36+
}
37+
}
38+
}
39+
`;
40+
41+
async function fetchAllPools() {
42+
let allPools = [];
43+
let skip = 0;
44+
const first = 1000;
45+
46+
while (true) {
47+
const poolsData = await request(SUBGRAPH, poolsQuery, { first, skip });
48+
const pools = poolsData.clPools;
49+
50+
if (pools.length === 0) break;
51+
52+
allPools = allPools.concat(pools);
53+
54+
if (pools.length < first) break;
55+
56+
skip += first;
57+
}
58+
59+
return allPools;
60+
}
61+
62+
async function apy() {
63+
try {
64+
const pools = await fetchAllPools();
65+
66+
let ramsesPools = [];
67+
try {
68+
const ramsesApiData = await axios.get('https://api2.ramses.xyz/all-pools');
69+
if (ramsesApiData.data && Array.isArray(ramsesApiData.data.pools)) {
70+
ramsesPools = ramsesApiData.data.pools;
71+
}
72+
} catch (error) {
73+
console.error('Failed to fetch Ramses API data:', error.message);
74+
}
75+
76+
const aprMap = {};
77+
for (const pool of ramsesPools) {
78+
if (pool.id) {
79+
aprMap[pool.id.toLowerCase()] = {
80+
lpApr: Number(pool.lpApr) || 0
81+
};
82+
}
83+
}
84+
85+
const results = [];
86+
87+
for (const pool of pools) {
88+
const tvlUsd = Number(pool.totalValueLockedUSD) || 0;
89+
90+
if (!pool.gauge?.id) continue;
91+
92+
const poolAddress = pool.id.toLowerCase();
93+
const apiData = aprMap[poolAddress];
94+
95+
if (!apiData) continue;
96+
97+
const apyBase = 0;
98+
let apyReward = 0;
99+
const tickSpacing = parseInt(pool.tickSpacing);
100+
101+
const apiPool = ramsesPools.find(p => p.id.toLowerCase() === poolAddress);
102+
if (apiPool && apiPool.recommendedRanges) {
103+
if (tickSpacing === 1 || tickSpacing === 5) {
104+
const wideRange = apiPool.recommendedRanges.find(range => range.name === 'Wide');
105+
apyReward = wideRange ? wideRange.lpApr : apiData.lpApr || 0;
106+
} else {
107+
const narrowRange = apiPool.recommendedRanges.find(range => range.name === 'Narrow');
108+
apyReward = narrowRange ? narrowRange.lpApr : apiData.lpApr || 0;
109+
}
110+
} else {
111+
apyReward = apiData.lpApr || 0;
112+
}
113+
114+
results.push({
115+
pool: `${poolAddress}-${utils.formatChain(CHAIN)}`.toLowerCase(),
116+
chain: utils.formatChain(CHAIN),
117+
project: PROJECT,
118+
poolMeta: `CL ${(Number(pool.feeTier) / 10000).toFixed(2)}%`,
119+
symbol: `${pool.token0.symbol}-${pool.token1.symbol}`,
120+
tvlUsd,
121+
apyBase,
122+
apyBase7d: 0,
123+
apyReward,
124+
rewardTokens: apyReward > 0 ? [RAM] : [],
125+
underlyingTokens: [
126+
pool.token0.id.toLowerCase(),
127+
pool.token1.id.toLowerCase()
128+
],
129+
url: `https://www.ramses.xyz/liquidity/${poolAddress}`,
130+
volumeUsd1d: pool.poolDayData?.[0]?.volumeUSD
131+
? Number(pool.poolDayData[0].volumeUSD)
132+
: 0,
133+
volumeUsd7d: pool.poolDayData
134+
? pool.poolDayData.reduce((sum, day) => sum + Number(day.volumeUSD || 0), 0)
135+
: 0,
136+
});
137+
}
138+
139+
return results.filter((p) => utils.keepFinite(p));
140+
141+
} catch (error) {
142+
console.error('Error fetching Ramses CL data:', error);
143+
return [];
144+
}
145+
}
146+
147+
module.exports = {
148+
timetravel: false,
149+
apy: apy,
150+
};

0 commit comments

Comments
 (0)