Skip to content

Commit 1a35382

Browse files
authored
Add BIM tvl adapter (DefiLlama#15371)
1 parent f02b535 commit 1a35382

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

projects/bim/index.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const utils = require('../helper/utils');
2+
const { toUSDTBalances } = require('../helper/balances');
3+
4+
const vaultEndpointBase = 'https://raw.githubusercontent.com/bim-finance-org/staking-vaults/master/';
5+
const chainVaultEndpoints = {
6+
10: vaultEndpointBase + "optimism.json",
7+
100: vaultEndpointBase + "gnosis.json",
8+
137: vaultEndpointBase + "polygon.json",
9+
8453: vaultEndpointBase + "base.json",
10+
};
11+
12+
const chains = {
13+
xdai: 100,
14+
polygon: 137,
15+
base: 8453,
16+
optimism: 10,
17+
}
18+
19+
const getVaultBalances = async (chainId, vaults, api) => {
20+
if (!vaults) {
21+
throw new Error(`getVaultBalances: undefined vaults passed for ${chainId}`);
22+
}
23+
const calls = vaults.map(vault => {
24+
return api.call({
25+
abi: {
26+
inputs: [],
27+
name: 'balance',
28+
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
29+
stateMutability: 'view',
30+
type: 'function',
31+
},
32+
target: vault.earnedTokenAddress,
33+
});
34+
});
35+
const res = await Promise.all(calls);
36+
return res;
37+
};
38+
39+
function fetchChain(chainId) {
40+
return async (_, _b, _cb, { api, }) => {
41+
42+
const chainVaults = utils.fetchURL(chainVaultEndpoints[chainId])
43+
const vaults = (await chainVaults).data;
44+
if( !vaults || vaults.length === 0) {
45+
return toUSDTBalances(0);
46+
}
47+
48+
const balances = await getVaultBalances(chainId, vaults, api);
49+
const tokens = vaults.map((vault) => vault.tokenAddress)
50+
51+
api.add(tokens, balances)
52+
}
53+
}
54+
55+
module.exports = {
56+
timetravel: false,
57+
misrepresentedTokens: true,
58+
doublecounted: true,
59+
...Object.fromEntries(Object.entries(chains).map(chain => [chain[0], {
60+
tvl: fetchChain(chain[1])
61+
}]))
62+
}

0 commit comments

Comments
 (0)