Skip to content

Commit 6603a79

Browse files
committed
cleanup
1 parent ea34ccb commit 6603a79

File tree

5 files changed

+52
-320
lines changed

5 files changed

+52
-320
lines changed

projects/cookfinance/index.js

Lines changed: 13 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
1-
const sdk = require("@defillama/sdk");
21
const { staking } = require("../helper/staking.js");
3-
const { pool2, pool2s } = require("../helper/pool2");
4-
const yieldyakAbi = require("./yieldyakAbi.json");
5-
const alpacaFinanceAbi = require("../alpaca-finance/abi.json");
6-
const BigNumber = require("bignumber.js");
2+
const { pool2, } = require("../helper/pool2");
73
const { sumTokens2 } = require('../helper/unwrapLPs')
8-
const { getSymbols } = require('../helper/utils')
94

105
const stakingContractHeco = "0xF0979F9692966D110E39d82a44655c9934F5cC73";
116
const COOK_heco = "0x74189862b069e2be5f7c8e6ff08ea8e1b1948519";
@@ -37,110 +32,27 @@ const ethIndexes = [
3732
const getComponentsABI = "address[]:getComponents"
3833
const getCKsABI = "address[]:getCKs"
3934

40-
async function getTvl({ chain, block, indices }) {
41-
const indexCalls = indices.map(i => ({ target: i }))
42-
const { output: components } = await sdk.api.abi.multiCall({
43-
abi: getComponentsABI,
44-
calls: indexCalls,
45-
block, chain,
46-
})
47-
48-
const tokensAndOwners = []
49-
components.forEach(({ output }, i) => {
50-
output.forEach(t => tokensAndOwners.push([t, indices[i]]))
51-
})
52-
53-
return sumTokens2({ tokensAndOwners, block, chain, })
35+
async function getTvl({ api, indices }) {
36+
const components = await api.multiCall({ abi: getComponentsABI, calls: indices, })
37+
const ownerTokens = indices.map((v, i) => [components[i], v])
38+
return sumTokens2({ ownerTokens, api, })
5439

5540
}
5641

57-
async function ethTvl(timestamp, block) {
58-
return getTvl({ indices: ethIndexes })
42+
async function ethTvl(api) {
43+
return getTvl({ indices: ethIndexes, api })
5944
}
6045

61-
async function avaTvl(timestamp, ethBlock, chainBlocks) {
62-
const block = chainBlocks.avax;
63-
const chain = 'avax'
46+
async function avaTvl(api) {
6447
const CONTROLLER_ADDRESS = "0xE565711e7a59800e110c959E156121988E6F4704";
65-
let { output: avaIndexes } = await sdk.api.abi.call({
66-
target: CONTROLLER_ADDRESS,
67-
abi: getCKsABI,
68-
chain, block,
69-
});
70-
const balances = await getTvl({ indices: avaIndexes, chain, block, })
71-
Object.entries(balances).forEach(([token, balance]) => {
72-
delete balances[token]
73-
balances[token.toLowerCase()] = balance
74-
})
75-
76-
const symbols = await getSymbols(chain, Object.keys(balances))
77-
const calls = []
78-
const balanceCalls = []
79-
Object.entries(symbols).forEach(([token, symbol]) => {
80-
if (symbol && symbol.startsWith('YRT')) {
81-
calls.push({ target: token })
82-
balanceCalls.push({ target: token, params: [balances['avax:' + token]] })
83-
}
84-
})
85-
const [
86-
{ output: token },
87-
{ output: newBalance },
88-
] = await Promise.all([
89-
sdk.api.abi.multiCall({ abi: yieldyakAbi.depositToken, calls, chain, block, }),
90-
sdk.api.abi.multiCall({ abi: yieldyakAbi.getDepositTokensForShares, calls: balanceCalls, chain, block, }),
91-
])
92-
93-
token.forEach(({ output, input }, i) => {
94-
const origToken = `avax:${input.target}`
95-
const balance = newBalance[i].output
96-
delete balances[origToken]
97-
sdk.util.sumSingleBalance(balances, 'avax:' + output, balance)
98-
})
99-
100-
return balances
48+
let avaIndexes = await api.call({ target: CONTROLLER_ADDRESS, abi: getCKsABI, });
49+
return getTvl({ indices: avaIndexes, api })
10150
}
10251

103-
async function bscTvl(timestamp, ethBlock, chainBlocks) {
104-
const block = chainBlocks.bsc;
105-
const chain = 'bsc'
52+
async function bscTvl(api) {
10653
const CONTROLLER_ADDRESS = "0x822aeB433A4Ea7A97b76287cB513C3985034a2Bd";
107-
let { output: bscIndexes } = await sdk.api.abi.call({
108-
target: CONTROLLER_ADDRESS,
109-
abi: getCKsABI,
110-
chain: "bsc",
111-
block,
112-
});
113-
114-
const balances = await getTvl({ indices: bscIndexes, chain, block, })
115-
// const symbols = await getSymbols(chain, Object.keys(balances))
116-
const calls = []
117-
// Object.entries(symbols).forEach(([token, symbol]) => {
118-
// if (symbol.startsWith('ib')) calls.push({ target: token })
119-
// })
120-
const [
121-
{ output: token },
122-
{ output: totalToken },
123-
{ output: totalSupply },
124-
] = await Promise.all([
125-
sdk.api.abi.multiCall({ abi: alpacaFinanceAbi.token, calls, chain, block, }),
126-
sdk.api.abi.multiCall({ abi: alpacaFinanceAbi.totalToken, calls, chain, block, }),
127-
sdk.api.abi.multiCall({ abi: alpacaFinanceAbi.totalSupply, calls, chain, block, }),
128-
])
129-
130-
token.forEach(({ output, input }, i) => {
131-
const origToken = `bsc:${input.target}`
132-
const origBalance = balances[origToken]
133-
if (!origBalance) {
134-
return;
135-
}
136-
const totalT = totalToken[i].output
137-
const totalS = totalSupply[i].output
138-
const balance = BigNumber(origBalance).times(totalT).idiv(totalS).toFixed(0)
139-
delete balances[origToken]
140-
sdk.util.sumSingleBalance(balances, 'bsc:' + output, balance)
141-
})
142-
143-
return balances
54+
let bscIndexes = await api.call({ target: CONTROLLER_ADDRESS, abi: getCKsABI, });
55+
return getTvl({ indices: bscIndexes, api })
14456
}
14557

14658
module.exports = {
@@ -151,7 +63,6 @@ module.exports = {
15163
pool2: staking(
15264
["0x4b21da40dd8d9f4363e69a9a1620d7cdb49123be"],
15365
ethPool2LPs,
154-
"ethereum"
15566
),
15667
staking: staking(stakingPool, cookToken),
15768
},
@@ -161,20 +72,16 @@ module.exports = {
16172
staking: staking(
16273
"0x35bE7982bC5E40A8C9aF39A639bDDcE32081102e",
16374
"0x637afeff75ca669ff92e4570b14d6399a658902f",
164-
"avax",
165-
//"avax:0x637afeff75ca669ff92e4570b14d6399a658902f"
16675
),
16776
},
16877
bsc: {
16978
pool2: staking(
17079
["0x47b517061841e6bFaaeB6336C939724F47e5E263"],
17180
bscPool2LPs,
172-
"bsc"
17381
),
17482
staking: staking(
17583
"0x1Abeaa9D633162586a4c80389160c33327C9Aff5",
17684
"0x965b0df5bda0e7a0649324d78f03d5f7f2de086a",
177-
"bsc"
17885
),
17986
tvl: bscTvl,
18087
},

projects/keeper-dao/index.js

Lines changed: 19 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,45 @@
11
const ADDRESSES = require('../helper/coreAssets.json')
22

3-
const sdk = require('@defillama/sdk');
4-
const BigNumber = require('bignumber.js');
5-
const { sumTokens2 } = require('../helper/unwrapLPs');
6-
const liquidityAbi = require('./abi/liquidity.json');
3+
const liquidityAbi = {
4+
"registeredTokens": "function registeredTokens(uint256) view returns (address)",
5+
"getAllMarkets": "address[]:getAllMarkets",
6+
}
77

88
const LIQUIDITY_POOL_CONTRACTS = {
99
liquidityPoolContractV3: '0x35fFd6E268610E764fF6944d07760D0EFe5E40E5',
1010
liquidityPoolContractV4: '0x4F868C1aa37fCf307ab38D215382e88FCA6275E2'
1111
}
12-
const HIDING_VAULT_START_BLOCK_NUMBER = 12690306;
1312
const HIDING_VAULT_CONTRACT = '0xE2aD581Fc01434ee426BB3F471C4cB0317Ee672E';
1413
const COMPOUND_COMPTROLLER_ADDRESS = '0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B';
1514

16-
async function getToken(block, index, liquidityPool) {
17-
try {
18-
return (await sdk.api.abi.call({
19-
block,
20-
target: liquidityPool,
21-
params: [index],
22-
abi: liquidityAbi['registeredTokens'],
23-
})).output
24-
} catch (e) { return null}
25-
}
26-
27-
async function getAllTokens(block, liquidityPool) {
28-
let tokens = []
29-
for (let i = 0; ; i++) {
30-
const token = await getToken(block, i, liquidityPool)
31-
32-
if (!token) {
33-
break;
34-
}
35-
36-
tokens.push(token)
37-
}
38-
39-
return tokens;
40-
}
41-
4215
// Calculates all the token balances in Hiding Vault NFTs minted till the given block
43-
async function getHidingVaultBalances(timestamp, block) {
44-
let hidingVaultBalances = {}
45-
46-
// Track TVL of Hiding Vaults after it went live
47-
if (block > HIDING_VAULT_START_BLOCK_NUMBER) {
48-
// Get total Hiding Vault NFT count by calling totalSupply on Hiding Vault Contract
49-
// Using erc20 lib as erc721 lib isn't supported yet.
50-
let noOfHidingVaults = (await sdk.api.erc20.totalSupply({
51-
target: HIDING_VAULT_CONTRACT,
52-
block: block
53-
})).output;
54-
55-
// numberRange to iterate over indexes of NFTs. Can migrate to any supported util func of erc721 when it is supported.
56-
const indexRange = [];
57-
for (let i = 0; i < +noOfHidingVaults; i++)
58-
indexRange.push(i)
59-
60-
// Query Hiding Vault Contract's 'tokenByIndex' with index to get individual HidingVaultNFTs
61-
let totalHidingVaultNFTs = (await sdk.api.abi.multiCall({
62-
target: HIDING_VAULT_CONTRACT,
63-
calls: indexRange.map((index) => ({
64-
params: [index],
65-
})),
66-
abi: liquidityAbi['tokenByIndex'],
67-
block: block
68-
})).output;
69-
70-
totalHidingVaultNFTs = totalHidingVaultNFTs.map(hidingVaultNFT => hidingVaultNFT.output);
71-
16+
async function getHidingVaultBalances(api) {
17+
const nfts = await api.fetchList({ lengthAbi: 'totalSupply', itemAbi: 'tokenByIndex', target: HIDING_VAULT_CONTRACT})
7218
// all of Compound's supply & borrow assets adresses
73-
const { output: cTokens } = await sdk.api.abi.call(
19+
const cTokens = await api.call(
7420
{
75-
block,
7621
target: COMPOUND_COMPTROLLER_ADDRESS,
77-
params: [],
7822
abi: liquidityAbi["getAllMarkets"]
7923
}
8024
)
81-
82-
// for each of Compound's cTokens get all of hidingVaultNFT balance and the underlying token address
83-
await Promise.all(cTokens.map(async (cTokenAddress) => {
84-
// get the underlying token address
85-
const isCEth = cTokenAddress.toLowerCase() === "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5"
86-
const { output: token } = isCEth
87-
? { output: ADDRESSES.null } // ETH has no underlying asset on Compound
88-
: await sdk.api.abi.call(
89-
{
90-
block,
91-
target: cTokenAddress,
92-
params: [],
93-
abi: liquidityAbi["underlying"]
94-
}
95-
)
96-
97-
// making a call to get the asset balance for each hidingVaultNFT
98-
const calls = []
99-
100-
totalHidingVaultNFTs.forEach(hidingVaultNFT => {
101-
calls.push({
102-
target: cTokenAddress,
103-
params: [hidingVaultNFT]
104-
})
105-
})
106-
107-
const underlyingBalances = await sdk.api.abi.multiCall({
108-
abi: liquidityAbi["balanceOfUnderlying"],
109-
calls,
110-
block,
111-
});
112-
113-
// accumulating all our hidingVaultNFT balances to calculate the TVL for this cToken
114-
const sumTotal = underlyingBalances.output.map(({ output }) => output).reduce((acc, val) => {
115-
return (new BigNumber(acc).plus(new BigNumber(val))).toString(10)
116-
}, "0")
117-
118-
hidingVaultBalances[token] = (new BigNumber(hidingVaultBalances[token] || "0").plus(new BigNumber(sumTotal))).toString(10);
119-
}));
120-
}
121-
122-
return hidingVaultBalances;
25+
return api.sumTokens({ owners: nfts, tokens: cTokens})
12326
}
12427

12528
// Calculates the token balances in Liquidity Pool Contracts till the given block
126-
async function getLiquidityPoolBalances(timestamp, block, api) {
127-
const toa = []
128-
129-
await Promise.all(Object.values(LIQUIDITY_POOL_CONTRACTS).map(async liquidityPool => {
130-
let tokens = await getAllTokens(block, liquidityPool)
131-
tokens.forEach(i => toa.push([i, liquidityPool]))
132-
}))
133-
return toa
29+
async function getLiquidityPoolBalances(api) {
30+
const pools = Object.values(LIQUIDITY_POOL_CONTRACTS)
31+
return api.sumTokens({ owners: pools, tokens: [
32+
ADDRESSES.null,
33+
ADDRESSES.ethereum.USDC,
34+
ADDRESSES.ethereum.WETH,
35+
'0xeb4c2781e4eba804ce9a9803c67d0893436bb27d',
36+
ADDRESSES.ethereum.DAI,
37+
]})
13438
}
13539

13640
async function tvl(api) {
137-
const { timestamp, block } = api
138-
const tokensAndOwners = await getLiquidityPoolBalances(timestamp, block);
139-
const balances = await getHidingVaultBalances(timestamp, block);
140-
141-
return sumTokens2({ api, balances, tokensAndOwners });
41+
await getLiquidityPoolBalances(api);
42+
await getHidingVaultBalances(api);
14243
}
14344

14445
module.exports = {

0 commit comments

Comments
 (0)