add additional chains (#9772)

* add additional chains

* code refactor

---------

Co-authored-by: g1nt0ki <99907941+g1nt0ki@users.noreply.github.com>
This commit is contained in:
F
2024-04-10 10:41:00 +02:00
committed by GitHub
parent 372f16798d
commit 3b7043ad70
3 changed files with 55 additions and 239 deletions

View File

@@ -1,87 +1,35 @@
const sdk = require("@defillama/sdk");
const { ethereumContractData, polygonContractData, avaxContractData, bscContractData, kavaContractData, } = require("./config");
const { getCache, setCache, } = require("../helper/cache")
const { vestingHelper, } = require("../helper/unknownTokens")
const { vestingHelper, } = require("../helper/unknownTokens")
const config = require("./config")
const project = 'bulky/team-finance'
function getTvl(args) {
return async (timestamp, ethBlock, chainBlocks) => {
let totalBalances = {}
for (let i = 0; i < args.length; i++) {
async function tvl(api) {
const chain = api.chain
const args = config[chain]
const cache = await getCache(project, chain) || { vaults: {} }
if (!cache.vaults) cache.vaults = {}
const _tvl = async ({ contractABI, contract, blacklist, }) => {
if (!cache.vaults[contract]) cache.vaults[contract] = { tokens: [], }
const cCache = cache.vaults[contract]
let tokens = await api.fetchList({ lengthAbi: contractABI.depositId, itemAbi: contractABI.getDepositDetails, target: contract, permitFailure: true, startFrom: cCache.tokens.length })
tokens = tokens.filter(i => i).map(i => i._tokenAddress)
cCache.tokens.push(...tokens)
const contractAddress = args[i].contract
const abi = args[i].contractABI
const chain = args[i].chain
const cache = await getCache(project, chain) || { vaults: {} }
if (!cache.vaults) cache.vaults = {}
if (!cache.vaults[contractAddress]) cache.vaults[contractAddress] = { lastTotalId: 0, tokens: [], }
const cCache = cache.vaults[contractAddress]
const block = chainBlocks[chain]
const trackedTokens = args[i].trackedTokens
const totalDepositId = Number(
(
await sdk.api.abi.call({
abi: abi.depositId,
target: contractAddress,
chain, block
})
).output
);
let calls = []
for (let i = cCache.lastTotalId; i < totalDepositId; i++)
calls.push({ params: i })
cCache.lastTotalId = totalDepositId
const lpAllTokens = (
await sdk.api.abi.multiCall({
target: contractAddress,
abi: abi.getDepositDetails,
chain, block, calls,
})
).output
lpAllTokens.forEach(lp => {
if (!lp.success) return;
const lpToken = lp.output[0].toLowerCase()
cCache.tokens.push(lpToken)
})
const balances = await vestingHelper({
cache,
useDefaultCoreAssets: true,
owner: contractAddress,
tokens: cCache.tokens,
block, chain,
blacklist: args[i].blacklist,
})
await setCache(project, chain, cache)
for (const [token, balance] of Object.entries(balances))
sdk.util.sumSingleBalance(totalBalances, token, balance)
}
return totalBalances
const balances = await vestingHelper({ ...api, cache, useDefaultCoreAssets: true, owner: contract, tokens: cCache.tokens, blacklist, })
api.addBalances(balances)
}
await Promise.all(args.map(_tvl))
await setCache(project, chain, cache)
}
module.exports = {
methodology: `Counts each LP pair's native token and
stable balance, adjusted to reflect locked pair's value.
Balances and merged across multiple locker to return sum TVL per chain`,
ethereum: {
tvl: getTvl(ethereumContractData),
},
bsc: {
tvl: getTvl(bscContractData),
},
polygon: {
tvl: getTvl(polygonContractData),
},
avax: {
tvl: getTvl(avaxContractData),
},
kava: {
tvl: getTvl(kavaContractData)
}
misrepresentedTokens: true,
};
Object.keys(config).forEach(chain => {
module.exports[chain] = { tvl }
})

View File

@@ -1,91 +1,38 @@
const abi = require("./lockcontract_v3.abi.json");
const abi_v2 = require("./lockcontract.abi.json");
const ethereumContractData = [
{
chain: "ethereum",
contract: "0xe2fe530c047f2d85298b07d9333c05737f1435fb",
contractABI: abi,
factory: "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f"
},
{
chain: "ethereum",
contract: "0xdbf72370021babafbceb05ab10f99ad275c6220a",
contractABI: abi_v2,
factory: "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f"
},
{
chain: "ethereum",
contract: "0xc77aab3c6d7dab46248f3cc3033c856171878bd5",
contractABI: abi_v2,
factory: "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f"
},
]
const kavaContractData = [
{
chain: "kava",
contract: "0xa9ec655dac35d989c0c8be075b1106dcd32502d6",
contractABI: abi_v2,
factory: "0x4FD2c40c25Dd40e9Bf0CE8479bA384178b8671b5",
},
];
const polygonContractData = [
{
chain: "polygon",
contract: "0x3eF7442dF454bA6b7C1deEc8DdF29Cfb2d6e56c7",
contractABI: abi_v2,
factory: "0x5757371414417b8c6caad45baef941abc7d3ab32"
},
{
chain: "polygon",
contract: "0x586c21a779c24efd2a8af33c9f7df2a2ea9af55c",
contractABI: abi_v2,
factory: "0x5757371414417b8c6caad45baef941abc7d3ab32"
},
]
const avaxContractData = [
{
chain: "avax",
contract: "0x88ada02f6fce2f1a833cd9b4999d62a7ebb70367",
contractABI: abi_v2,
factory: "0x9ad6c38be94206ca50bb0d90783181662f0cfa10"
},
{
chain: "avax",
contract: "0xe2fe530c047f2d85298b07d9333c05737f1435fb",
contractABI: abi,
factory: "0x9ad6c38be94206ca50bb0d90783181662f0cfa10"
},
]
const bscContractData = [
{
chain: "bsc",
contract: "0x0c89c0407775dd89b12918b9c0aa42bf96518820",
contractABI: abi_v2,
blacklist: [
'0x6c7c87d9868b1db5a0f62d867baa90e0adfa7cfd', //TNNS
'0xf2619476bd0ca0eda08744029c66b62a904c2bf8', //JRIT
'0x854b4c305554c5fa72353e31b8480c0e5128a152', //WEL
'0x070a08beef8d36734dd67a491202ff35a6a16d97', // SLP
'0x9b83f4b893cf061d8c14471aa97ef24c352f5abe', // ubec-lp
]
},
{
chain: "bsc",
contract: "0x7536592bb74b5d62eb82e8b93b17eed4eed9a85c",
contractABI: abi_v2,
},
]
module.exports = {
ethereumContractData,
polygonContractData,
avaxContractData,
bscContractData,
kavaContractData
ethereum: [
{ contract: "0xe2fe530c047f2d85298b07d9333c05737f1435fb", contractABI: abi, },
{ contract: "0xdbf72370021babafbceb05ab10f99ad275c6220a", contractABI: abi_v2, },
{ contract: "0xc77aab3c6d7dab46248f3cc3033c856171878bd5", contractABI: abi_v2, },
],
kava: [{ contract: "0xa9ec655dac35d989c0c8be075b1106dcd32502d6", contractABI: abi_v2, },],
polygon: [
{ contract: "0x3eF7442dF454bA6b7C1deEc8DdF29Cfb2d6e56c7", contractABI: abi_v2, },
{ contract: "0x586c21a779c24efd2a8af33c9f7df2a2ea9af55c", contractABI: abi_v2, },
],
avax: [
{ contract: "0x88ada02f6fce2f1a833cd9b4999d62a7ebb70367", contractABI: abi_v2, },
{ contract: "0xe2fe530c047f2d85298b07d9333c05737f1435fb", contractABI: abi, },
],
arbitrum: [{ contract: "0xE0B0D2021293Bee9715e1Db3be31b55C00F72A75", contractABI: abi_v2, }],
base: [{ contract: "0x4f0fd563be89ec8c3e7d595bf3639128c0a7c33a", contractABI: abi_v2 },],
velas: [{ contract: "0x586c21A779C24eFd2a8aF33C9F7Df2a2EA9aF55c", contractABI: abi_v2 },],
fantom: [{ contract: "0x9F726019452d65a120E1F7Ae6b937eE9EbD72440", contractABI: abi_v2 },],
cronos: [{ contract: "0x05b711Df32d73ECaa877d45a637a2eB415e7995f", contractABI: abi_v2 },],
bsc: [
{
contract: "0x0c89c0407775dd89b12918b9c0aa42bf96518820",
contractABI: abi_v2,
blacklist: [
'0x6c7c87d9868b1db5a0f62d867baa90e0adfa7cfd', //TNNS
'0xf2619476bd0ca0eda08744029c66b62a904c2bf8', //JRIT
'0x854b4c305554c5fa72353e31b8480c0e5128a152', //WEL
'0x070a08beef8d36734dd67a491202ff35a6a16d97', // SLP
'0x9b83f4b893cf061d8c14471aa97ef24c352f5abe', // ubec-lp
]
},
{ contract: "0x7536592bb74b5d62eb82e8b93b17eed4eed9a85c", contractABI: abi_v2, },
],
}

View File

@@ -1,81 +1,2 @@
const sdk = require("@defillama/sdk");
const { ethereumContractData, polygonContractData, avaxContractData, bscContractData, kavaContractData } = require("./config");
const { vestingHelper } = require("../helper/unknownTokens");
function getTvl(args) {
return async (timestamp, ethBlock, chainBlocks) => {
let totalBalances = {}
for (let i = 0; i < args.length; i++) {
const contractAddress = args[i].contract
const abi = args[i].contractABI
const chain = args[i].chain
const block = chainBlocks[chain]
const trackedTokens = args[i].trackedTokens
const totalDepositId = Number(
(
await sdk.api.abi.call({
abi: abi.depositId,
target: contractAddress,
chain: chain,
block: block
})
).output
);
let lockedLPs = [];
const allDepositId = Array.from(Array(totalDepositId).keys());
const lpAllTokens = (
await sdk.api.abi.multiCall({
abi: abi.getDepositDetails,
calls: allDepositId.map((num) => ({
target: contractAddress,
params: num,
})),
chain: chain,
block: block
})
).output
lpAllTokens.forEach(lp => {
if (!lp.success) return;
const lpToken = lp.output[0].toLowerCase()
lockedLPs.push(lpToken)
})
const balances = await vestingHelper({
useDefaultCoreAssets: true,
owner: contractAddress,
tokens: lockedLPs,
block, chain,
blacklist: args[i].blacklist,
})
for (const [token, balance] of Object.entries(balances))
sdk.util.sumSingleBalance(totalBalances, token, balance)
}
return totalBalances
}
}
module.exports = {
methodology: `Counts each LP pair's native token and
stable balance, adjusted to reflect locked pair's value.
Balances and merged across multiple locker to return sum TVL per chain`,
ethereum: {
tvl: getTvl(ethereumContractData),
},
bsc: {
tvl: getTvl(bscContractData),
},
polygon: {
tvl: getTvl(polygonContractData),
},
avax: {
tvl: getTvl(avaxContractData),
},
kava: {
tvl: getTvl(kavaContractData)
}
};
module.exports = require("./apiCache")