Skip to content

Commit c42fdb6

Browse files
Rango Dex aggregator (DefiLlama#3773)
* add rango to dex aggregators and update chains * refactor --------- Co-authored-by: treeoflife2 <sol.analyzoor@gmail.com>
1 parent 477a28c commit c42fdb6

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

aggregators/rango/index.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import { Adapter, FetchOptions } from '../../adapters/types';
2+
import { httpGet } from '../../utils/fetchURL';
3+
import { CHAIN } from '../../helpers/chains';
4+
5+
const RangoChains: Record<string, string> = {
6+
[CHAIN.ETHEREUM]: 'ETH',
7+
[CHAIN.SOLANA]: 'SOLANA',
8+
[CHAIN.BSC]: 'BSC',
9+
[CHAIN.SCROLL]: 'SCROLL',
10+
[CHAIN.BASE]: 'BASE',
11+
[CHAIN.BITCOIN]: 'BTC',
12+
[CHAIN.ARBITRUM]: 'ARBITRUM',
13+
[CHAIN.POLYGON]: 'POLYGON',
14+
[CHAIN.OPTIMISM]: 'OPTIMISM',
15+
[CHAIN.LINEA]: 'LINEA',
16+
[CHAIN.CELO]: 'CELO',
17+
[CHAIN.AVAX]: 'AVAX_CCHAIN',
18+
[CHAIN.ERA]: 'ZKSYNC',
19+
[CHAIN.MODE]: 'MODE',
20+
[CHAIN.TRON]: 'TRON',
21+
[CHAIN.ZORA]: 'ZORA',
22+
[CHAIN.BLAST]: 'BLAST',
23+
[CHAIN.OSMOSIS]: 'OSMOSIS',
24+
[CHAIN.COSMOS]: 'COSMOS',
25+
[CHAIN.FANTOM]: 'FANTOM',
26+
[CHAIN.MOONRIVER]: 'MOONRIVER',
27+
[CHAIN.TAIKO]: 'TAIKO',
28+
[CHAIN.STARKNET]: 'STARKNET',
29+
[CHAIN.POLYGON_ZKEVM]: 'POLYGONZK',
30+
[CHAIN.SUI]: 'SUI',
31+
[CHAIN.CRONOS]: 'CRONOS',
32+
[CHAIN.NOBLE]: 'NOBLE',
33+
[CHAIN.BOBA]: 'BOBA',
34+
[CHAIN.THORCHAIN]: 'THOR',
35+
[CHAIN.FUSE]: 'FUSE',
36+
[CHAIN.XDAI]: 'GNOSIS',
37+
[CHAIN.HARMONY]: 'HARMONY',
38+
[CHAIN.MOONBEAM]: 'MOONBEAM',
39+
[CHAIN.TERRA]: 'TERRA',
40+
[CHAIN.SONIC]: 'SONIC',
41+
[CHAIN.TON]: 'TON',
42+
[CHAIN.BERACHAIN]: 'BERACHAIN',
43+
[CHAIN.AURORA]: 'AURORA',
44+
};
45+
46+
const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => {
47+
const prefetchData = options.preFetchedResults as Record<string, any[]>;
48+
const chainCode = RangoChains[options.chain];
49+
const statsForChain = prefetchData[chainCode] || [];
50+
51+
const date = new Date(timestamp * 1000).toISOString().split('T')[0];
52+
53+
const statEntry = statsForChain.find(item => {
54+
const itemDate = item.date.split('T')[0];
55+
return itemDate === date;
56+
});
57+
58+
return {
59+
dailyVolume: Number(statEntry?.volume || 0)
60+
}
61+
}
62+
63+
const prefetch = async (_: FetchOptions) => {
64+
const API_KEY = '4a624ab5-16ff-4f96-90b7-ab00ddfc342c'
65+
const DAYS = 10000
66+
const BREAKDOWN = 'SOURCE'
67+
68+
// fire off one request per chain
69+
const entries = await Promise.all(
70+
Object.values(RangoChains).map(chainCode =>
71+
httpGet(
72+
`https://api.rango.exchange/scanner/summary/daily` +
73+
`?days=${DAYS}` +
74+
`&breakDownBy=${BREAKDOWN}` +
75+
`&apiKey=${API_KEY}` +
76+
`&source=${chainCode}` +
77+
`&destination=${chainCode}`
78+
).then(response => [chainCode, response.stats])
79+
)
80+
);
81+
82+
return Object.fromEntries(entries);
83+
}
84+
85+
86+
const chainAdapter = { fetch, start: '2021-08-04' }
87+
88+
const adapter: Adapter = {
89+
adapter: Object.fromEntries(Object.entries(RangoChains).map(
90+
([chain]) => [chain, chainAdapter]
91+
)),
92+
prefetch: prefetch,
93+
}
94+
95+
export default adapter;

bridge-aggregators/rango/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ const RangoChains: Record<string, string> = {
3737
[CHAIN.HARMONY]: 'HARMONY',
3838
[CHAIN.MOONBEAM]: 'MOONBEAM',
3939
[CHAIN.TERRA]: 'TERRA',
40+
[CHAIN.SONIC]: 'SONIC',
41+
[CHAIN.TON]: 'TON',
42+
[CHAIN.BERACHAIN]: 'BERACHAIN',
43+
[CHAIN.AURORA]: 'AURORA',
4044
};
4145

4246
const fetch: any = async (timestamp: number, _: any, options: FetchOptions) => {

0 commit comments

Comments
 (0)