Skip to content

Commit d26b31f

Browse files
authored
Merge branch 'DefiLlama:master' into master
2 parents 4bb7d07 + a4f4337 commit d26b31f

File tree

7 files changed

+126
-107
lines changed

7 files changed

+126
-107
lines changed

src/adaptors/concentrator/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ const getATokenData = async () => {
8080
symbol: 'fxSave',
8181
tvlUsd: parseInt(fxSave.tvl, 10),
8282
apy: parseFloat(fxSave.apy),
83+
apyBase: parseFloat(fxSave.baseAPR),
8384
},
8485
{
8586
pool: `${asdPENDLEAddress}-concentrator`,

src/adaptors/euler-v2/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const axios = require('axios');
22
const sdk = require('@defillama/sdk');
33
const ethers = require('ethers');
44

5+
const { addMerklRewardApy } = require('../merkl/merkl-additional-reward');
6+
57
const lensAbi = require('./lens.abi.json');
68
const factoryAbi = require('./factory.abi.json');
79

@@ -151,7 +153,7 @@ const getApys = async () => {
151153
}
152154
}
153155

154-
return result.flat();
156+
return await addMerklRewardApy(result.flat(), 'euler');
155157
};
156158

157159
module.exports = {

src/adaptors/instadapp-lite/index.js renamed to src/adaptors/fluid-lite/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const getApy = async () => {
88
const pools = vaultData.map((item) => ({
99
pool: item.vault,
1010
chain: utils.formatChain('ethereum'),
11-
project: 'instadapp-lite',
11+
project: 'fluid-lite',
1212
symbol: item.token.symbol,
1313
tvlUsd: Number(item.vaultTVLInAsset) * item.token.price,
1414
apy: Number(item.apy.apyWithoutFee),

src/adaptors/lendle/index.js

+45-43
Original file line numberDiff line numberDiff line change
@@ -99,49 +99,51 @@ const getApy = async () => {
9999

100100
const _poolsApr = (await axios.get(poolsApr)).data;
101101

102-
return reservesList.map(async (t, i) => {
103-
const config = reserveConfigurationData[i];
104-
if (!config.isActive) return null;
105-
106-
const price = prices[`${sdkChain}:${t}`]?.price;
107-
108-
const tvlUsd = (liquidity[i] / 10 ** decimals[i]) * price;
109-
const totalBorrowUsd = (totalBorrow[i] / 10 ** decimals[i]) * price;
110-
const totalSupplyUsd = tvlUsd + totalBorrowUsd;
111-
112-
const apyBase = reserveData[i].currentLiquidityRate / 1e25;
113-
const apyBaseBorrow = reserveData[i].currentVariableBorrowRate / 1e25;
114-
115-
const apyReward = _poolsApr.rewards_apy?.[t.toLowerCase()]?.supply * 100 || 0;
116-
117-
const ltv = config.ltv / 1e4;
118-
const borrowable = config.borrowingEnabled;
119-
const frozen = config.isFrozen;
120-
121-
const url = `${lendleUrl}/marketdetail?asset=${
122-
symbols[i]
123-
}&contract=${t.toLowerCase()}`;
124-
125-
return {
126-
pool: `${reserveData[i].aTokenAddress}-${chain}`.toLowerCase(),
127-
symbol: symbols[i],
128-
project: 'lendle',
129-
chain,
130-
tvlUsd,
131-
apyBase,
132-
apyReward,
133-
underlyingTokens: [t],
134-
rewardTokens: ["0x25356aeca4210eF7553140edb9b8026089E49396"],
135-
url,
136-
// borrow fields
137-
totalSupplyUsd,
138-
totalBorrowUsd,
139-
apyBaseBorrow,
140-
ltv,
141-
borrowable,
142-
poolMeta: frozen ? 'frozen' : null,
143-
};
144-
});
102+
return Promise.all(
103+
reservesList.map(async (t, i) => {
104+
const config = reserveConfigurationData[i];
105+
if (!config.isActive) return null;
106+
107+
const price = prices[`${sdkChain}:${t}`]?.price;
108+
109+
const tvlUsd = (liquidity[i] / 10 ** decimals[i]) * price;
110+
const totalBorrowUsd = (totalBorrow[i] / 10 ** decimals[i]) * price;
111+
const totalSupplyUsd = tvlUsd + totalBorrowUsd;
112+
113+
const apyBase = reserveData[i].currentLiquidityRate / 1e25;
114+
const apyBaseBorrow = reserveData[i].currentVariableBorrowRate / 1e25;
115+
116+
const apyReward = _poolsApr.rewards_apy?.[t.toLowerCase()]?.supply * 100 || 0;
117+
118+
const ltv = config.ltv / 1e4;
119+
const borrowable = config.borrowingEnabled;
120+
const frozen = config.isFrozen;
121+
122+
const url = `${lendleUrl}/marketdetail?asset=${
123+
symbols[i]
124+
}&contract=${t.toLowerCase()}`;
125+
126+
return {
127+
pool: `${reserveData[i].aTokenAddress}-${chain}`.toLowerCase(),
128+
symbol: symbols[i],
129+
project: 'lendle',
130+
chain,
131+
tvlUsd,
132+
apyBase,
133+
apyReward,
134+
underlyingTokens: [t],
135+
rewardTokens: ["0x25356aeca4210eF7553140edb9b8026089E49396"],
136+
url,
137+
// borrow fields
138+
totalSupplyUsd,
139+
totalBorrowUsd,
140+
apyBaseBorrow,
141+
ltv,
142+
borrowable,
143+
poolMeta: frozen ? 'frozen' : null,
144+
};
145+
})
146+
);
145147
})
146148
);
147149

src/adaptors/uniswap-v2/index.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@ const main = async (timestamp = null) => {
127127
}
128128
}
129129

130-
return addMerklRewardApy(
130+
const pools = await addMerklRewardApy(
131131
data.filter((p) => utils.keepFinite(p)),
132132
'uniswap'
133133
);
134+
135+
return pools;
134136
};
135137

136138
module.exports = {

src/adaptors/uniswap-v3/index.js

+15-11
Original file line numberDiff line numberDiff line change
@@ -352,20 +352,24 @@ const main = async (timestamp = null) => {
352352
await topLvl(chain, url, query, queryPrior, 'v3', timestamp, stablecoins)
353353
);
354354
}
355-
data.push(...(await getOnchainPools()))
356-
return addMerklRewardApy(
355+
356+
const bobPools = await getOnchainPools();
357+
data.push(bobPools);
358+
359+
const pools = await addMerklRewardApy(
357360
data
358-
.flat()
359-
.filter(
360-
(p) =>
361-
utils.keepFinite(p) &&
362-
![
363-
'0x0c6d9d0f82ed2e0b86c4d3e9a9febf95415d1b76',
364-
'0xc809d13e9ea08f296d3b32d4c69d46ff90f73fd8',
365-
].includes(p.pool)
366-
),
361+
.flat()
362+
.filter(
363+
(p) =>
364+
utils.keepFinite(p) &&
365+
![
366+
'0x0c6d9d0f82ed2e0b86c4d3e9a9febf95415d1b76',
367+
'0xc809d13e9ea08f296d3b32d4c69d46ff90f73fd8',
368+
].includes(p.pool)
369+
),
367370
'uniswap'
368371
);
372+
return pools;
369373
};
370374

371375
module.exports = {

src/adaptors/uniswap-v3/onchain.js

+58-50
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const chains = {
1010
fromBlock: 5188280,
1111
blockTime: 2,
1212
ui: 'oku',
13-
}
13+
},
1414
};
1515

1616
const SwapInterface = new ethers.utils.Interface([
@@ -39,28 +39,38 @@ const getPools = async (chain) => {
3939
fee: BigInt(log.topics[3]),
4040
}));
4141

42-
const tokens = getUniqueAddresses(pools.map(p => p.token0).concat(pools.map(p => p.token1)));
42+
const tokens = getUniqueAddresses(
43+
pools.map((p) => p.token0).concat(pools.map((p) => p.token1))
44+
);
4345
const prices = await utils.getPrices(tokens, chain);
4446

45-
const tokenDecimals = Object.fromEntries((await sdk.api.abi.multiCall({
46-
abi: 'erc20:decimals',
47-
calls: tokens.map((t) => ({
48-
target: t,
49-
params: [],
50-
})),
51-
chain,
52-
permitFailure: true,
53-
})).output.map(o => [o.input.target, Number(o.output)]));
54-
55-
const tokenSymbols = Object.fromEntries((await sdk.api.abi.multiCall({
56-
abi: 'erc20:symbol',
57-
calls: tokens.map((t) => ({
58-
target: t,
59-
params: [],
60-
})),
61-
chain,
62-
permitFailure: true,
63-
})).output.map(o => [o.input.target, o.output]));
47+
const tokenDecimals = Object.fromEntries(
48+
(
49+
await sdk.api.abi.multiCall({
50+
abi: 'erc20:decimals',
51+
calls: tokens.map((t) => ({
52+
target: t,
53+
params: [],
54+
})),
55+
chain,
56+
permitFailure: true,
57+
})
58+
).output.map((o) => [o.input.target, Number(o.output)])
59+
);
60+
61+
const tokenSymbols = Object.fromEntries(
62+
(
63+
await sdk.api.abi.multiCall({
64+
abi: 'erc20:symbol',
65+
calls: tokens.map((t) => ({
66+
target: t,
67+
params: [],
68+
})),
69+
chain,
70+
permitFailure: true,
71+
})
72+
).output.map((o) => [o.input.target, o.output])
73+
);
6474

6575
const token0Balances = await sdk.api.abi.multiCall({
6676
abi: 'erc20:balanceOf',
@@ -87,31 +97,35 @@ const getPools = async (chain) => {
8797
});
8898

8999
for (const pool of pools) {
90-
if (!prices.pricesByAddress[pool.token0] || !prices.pricesByAddress[pool.token1]) {
100+
if (
101+
!prices.pricesByAddress[pool.token0] ||
102+
!prices.pricesByAddress[pool.token1]
103+
) {
91104
continue;
92105
}
93-
106+
94107
const swapLogs = await sdk.api.util.getLogs({
95108
chain,
96109
target: pool.address,
97110
topic: '',
98111
topics: [SwapInterface.getEventTopic('Swap')],
99112
keys: [],
100-
fromBlock: currentBlock.number - (24 * 3600 / config.blockTime),
113+
fromBlock: currentBlock.number - (24 * 3600) / config.blockTime,
101114
toBlock: currentBlock.number,
102115
});
103116

104-
const parsedSwapLogs = swapLogs.output.map(log => SwapInterface.parseLog(log).args);
105-
117+
const parsedSwapLogs = swapLogs.output.map(
118+
(log) => SwapInterface.parseLog(log).args
119+
);
106120

107121
const totalFee0 = parsedSwapLogs
108-
.map(log => log.amount0.toBigInt())
109-
.filter(x => x > 0n)
110-
.reduce((sum, x) => sum + (x * pool.fee / 1_000_000n), 0n);
122+
.map((log) => log.amount0.toBigInt())
123+
.filter((x) => x > 0n)
124+
.reduce((sum, x) => sum + (x * pool.fee) / 1_000_000n, 0n);
111125
const totalFee1 = parsedSwapLogs
112-
.map(log => log.amount1.toBigInt())
113-
.filter(x => x > 0n)
114-
.reduce((sum, x) => sum + (x * pool.fee / 1_000_000n), 0n);
126+
.map((log) => log.amount1.toBigInt())
127+
.filter((x) => x > 0n)
128+
.reduce((sum, x) => sum + (x * pool.fee) / 1_000_000n, 0n);
115129

116130
const feeValue0 = BigNumber(totalFee0)
117131
.times(10 ** (18 - tokenDecimals[pool.token0]))
@@ -124,14 +138,13 @@ const getPools = async (chain) => {
124138

125139
const feeValue = feeValue0.plus(feeValue1);
126140

127-
128141
const totalVolume0 = parsedSwapLogs
129-
.map(log => log.amount0.toBigInt())
130-
.filter(x => x > 0n)
142+
.map((log) => log.amount0.toBigInt())
143+
.filter((x) => x > 0n)
131144
.reduce((sum, x) => sum + x, 0n);
132145
const totalVolume1 = parsedSwapLogs
133-
.map(log => log.amount1.toBigInt())
134-
.filter(x => x > 0n)
146+
.map((log) => log.amount1.toBigInt())
147+
.filter((x) => x > 0n)
135148
.reduce((sum, x) => sum + x, 0n);
136149

137150
const volumeValue0 = BigNumber(totalVolume0)
@@ -145,7 +158,6 @@ const getPools = async (chain) => {
145158

146159
const volumeValue = volumeValue0.plus(volumeValue1);
147160

148-
149161
const tvl0 = pool.balance0
150162
.times(10 ** (18 - tokenDecimals[pool.token0]))
151163
.times(prices.pricesByAddress[pool.token0])
@@ -157,14 +169,11 @@ const getPools = async (chain) => {
157169

158170
const tvl = tvl0.plus(tvl1);
159171

160-
161172
const apr = feeValue.div(tvl).times(100).times(365);
162173
const apy = utils.aprToApy(apr.toNumber());
163174

164-
165175
const poolMeta = `${Number(pool.fee) / 1e4}%`;
166176

167-
168177
dataPools.push({
169178
pool: pool.address,
170179
chain,
@@ -174,11 +183,12 @@ const getPools = async (chain) => {
174183
tvlUsd: tvl.toNumber(),
175184
apyBase: apy,
176185
underlyingTokens: [pool.token0, pool.token1],
177-
url: config.ui === 'oku'
178-
? `https://oku.trade/app/${chain}/liquidity/${pool.address}`
179-
: `https://app.uniswap.org/#/add/${pool.token0}/${pool.token1}/${pool.fee}?chain=${chain}`,
186+
url:
187+
config.ui === 'oku'
188+
? `https://oku.trade/app/${chain}/liquidity/${pool.address}`
189+
: `https://app.uniswap.org/#/add/${pool.token0}/${pool.token1}/${pool.fee}?chain=${chain}`,
180190
volumeUsd1d: volumeValue.toNumber(),
181-
})
191+
});
182192
}
183193

184194
return dataPools;
@@ -188,11 +198,9 @@ const getOnchainPools = async () => {
188198
const data = [];
189199
for (const chain of Object.keys(chains)) {
190200
console.log(chain);
191-
data.push(
192-
await getPools(chain)
193-
);
201+
data.push(await getPools(chain));
194202
}
195-
return data;
196-
}
203+
return data.flat();
204+
};
197205

198206
module.exports = getOnchainPools;

0 commit comments

Comments
 (0)